Mam oświadczenie SQL, otrzymuję dane z niej do danych, ale potrzebuję filtrowania danych przez DataView i utwórz grupę Y z sumą ilości dla każdej grupy:

SELECT 
                    FatoraReso as xAcc,
                    AccName AS xAccName, 
                    FatoraDate AS xDate,
                    FatoraProduct as xProdID,
                    ProductName AS xProdName,
                    FatoraPurPrice as xPrice, 
                    sum(FatoraQuan) as xQuan, 
                    COUNT(FatoraID) AS xCarCount
                    from tblfatora
                    INNER JOIN tblaccounts ON tblaccounts.AccID = tblfatora.FatoraReso
                    INNER JOIN tblproducts ON tblproducts.ProductID = tblfatora.FatoraProduct
                    GROUP BY xAcc,xDate,xProdID,xPrice

                    UNION ALL 

                    SELECT 
                    FatoraCustomer as xAcc,
                    AccName AS xAccName, 
                    FatoraDate AS xDate,
                    FatoraProduct as xProdID,
                    ProductName AS xProdName,
                    FatoraSalePrice as xPrice,
                    sum(FatoraQuan) as xQuan, 
                    COUNT(FatoraID) AS xCarCount
                    from tblfatora
                    INNER JOIN tblaccounts ON tblaccounts.AccID = tblfatora.FatoraCustomer
                    INNER JOIN tblproducts ON tblproducts.ProductID = tblfatora.FatoraProduct
                    GROUP BY xAcc,xDate,xProdID,xPrice
                    ORDER BY xProdID,xPrice

Zrobiłem filtr przez XACC i XDATE, a potem nie wiedziałem, jak zastosować grupę, z uzyskaniem sumy dla każdej grupy. Widziałem kilka rozwiązań dotyczących korzystania z Linqa, ale naprawdę nie wiem o Linq. Więc mogę mi pomóc. Ostateczny stół, który chcę, jest:

+---------+--------+-------+-----------+
| xProdID | xPrice | xQuan | xCarCount |
+---------+--------+-------+-----------+
| 1       | 55     | 10    | 2         |
+---------+--------+-------+-----------+
| 1       | 60     | 15    | 1         |
+---------+--------+-------+-----------+
| 2       | 150    | 12    | 3         |
+---------+--------+-------+-----------+
| 2       | 155    | 11    | 2         |
+---------+--------+-------+-----------+

Tblfatora:

CREATE TABLE `tblfatora` (
`FatoraID` bigint(20) NOT NULL,
`FatoraRef` bigint(20) NOT NULL,
`FatoraCode` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`FatoraDate` date NOT NULL,
`FatoraProduct` int(11) NOT NULL,
`FatoraQuan` double NOT NULL DEFAULT '0',
`FatoraReso` int(11) NOT NULL,
`FatoraPurPrice` double NOT NULL DEFAULT '0',
`FatoraPurTotal` double NOT NULL DEFAULT '0',
`FatoraCustomer` int(11) NOT NULL,
`FatoraSalePrice` double NOT NULL DEFAULT '0',
`FatoraDis` double NOT NULL DEFAULT '0',
`FatoraPlus` double NOT NULL DEFAULT '0',
`FatoraSaleTotal` double NOT NULL DEFAULT '0',
`FatoraDriverPayStatus` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`FatoraDriver` int(11) NOT NULL,
`FatoraCarNo` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`FatoraDriverCost` double NOT NULL DEFAULT '0',
`FatoraDriverCostTotal1` double NOT NULL DEFAULT '0',
`FatoraDriverCostTotal2` double NOT NULL DEFAULT '0',
`FatoraDriverPrice` double NOT NULL DEFAULT '0',
`FatoraDetails1` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`FatoraDetails2` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`FatoraDetails3` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`FatoraPalletQuan` double NOT NULL DEFAULT '0',
`FatoraPalletPrice` double NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT;

Tblfatoradata:

INSERT INTO `tblfatora` (`FatoraID`, `FatoraRef`, `FatoraCode`, `FatoraDate`, 
`FatoraProduct`, `FatoraQuan`, `FatoraReso`, `FatoraPurPrice`, 
`FatoraPurTotal`, `FatoraCustomer`, `FatoraSalePrice`, `FatoraDis`, 
`FatoraPlus`, `FatoraSaleTotal`, `FatoraDriverPayStatus`, `FatoraDriver`, 
`FatoraCarNo`, `FatoraDriverCost`, `FatoraDriverCostTotal1`, 
`FatoraDriverCostTotal2`, `Fato`raDriverPrice`, `FatoraDetails1`, 
`FatoraDetails2`, `FatoraDetails3`, `FatoraPalletQuan`, `FatoraPalletPrice`) 
VALUES
(1, 202010180304112, '', '2020-10-01', 41, 31, 112, 71, 2201, 93, 71, 0, 0, 
2201, 'Paid', 128, '135538', 0, 0, 0, 1, '', '', '', 0, 0),
(2, 202010180720343, '', '2020-10-01', 43, 40, 112, 61, 2440, 83, 68000, 0, 
0, 2720000, 'Paid', 129, '', 0, 0, 0, 1, '', '', '', 0, 0),
(3, 202010180807273, '', '2020-10-01', 43, 34, 112, 61, 2074, 341, 72000, 0, 
0, 2448000, 'Paid', 130, '8142', 0, 0, 0, 1, '', '', '', 0, 0),
(4, 202010180819273, '', '2020-10-01', 50, 40, 114, 70, 2800, 76, 70, 0, 0, 
2800, 'Paid', 131, '', 0, 0, 0, 1250, '', '', '', 0, 0),
(5, 202010180821373, '', '2020-10-01', 55, 39.22, 114, 66, 2588.52, 55, 66, 
0, 0, 2588.52, 'Paid', 132, '', 0, 0, 0, 1250, '', '', '', 0, 0),
(6, 202010180823183, '', '2020-10-01', 50, 38, 114, 70, 2660, 360, 70, 0, 0, 
2660, 'Paid', 133, '', 0, 0, 0, 1, '', '', '', 0, 0),
(7, 202010180825173, '', '2020-10-01', 50, 39, 114, 70, 2730, 67, 64, 0, 14, 
2510, 'Paid', 134, '', 0, 0, 0, 1250, '', '', '', 0, 0),
(8, 202010180832333, '', '2020-10-02', 48, 31, 113, 63, 1953, 64, 56, 0, 0, 
1736, 'Paid', 135, '', 0, 0, 0, 1240, '', '', '', 0, 0),
(9, 202010180833593, '', '2020-10-01', 48, 35, 113, 63, 2205, 82, 63, 0, 0, 
 2205, 
'Paid', 136, '', 0, 0, 0, 1, '', '1', '', 0, 0),
(10, 202010180838003, '', '2020-10-01', 35, 35.46, 115, 57, 2021.22, 53, 56, 
0, 0, 1985.76, 'Paid', 137, '135280', 0, 0, 0, 1240, '', '', '', 0, 0),
(11, 202010180841213, '', '2020-10-02', 43, 33, 112, 61, 2013, 79, 58, 0, 0, 
1914, 'Paid', 138, '', 0, 0, 0, 1240, '', '', '', 0, 0),
(12, 202010180843373, '', '2020-10-02', 43, 39, 112, 61, 2379, 84, 70000, 0, 
 0, 2730000, 'Paid', 139, '10978', 0, 0, 0, 1, '', '', '', 0, 0),
(13, 202010180846253, '', '2020-10-02', 43, 39, 112, 61, 2379, 225, 56, 0, 0, 
2184, 'Paid', 140, '9705', 0, 0, 0, 1240, '', '', '', 0, 0),
(14, 202010180847593, '', '2020-10-02', 43, 40, 112, 61, 2440, 344, 61, 0, 0, 
2440, 'Paid', 141, '97464', 0, 0, 0, 1, '', '', '', 0, 0),
(15, 202010180849563, '', '2020-10-02', 43, 36, 112, 61, 2196, 73, 57, 0, 0, 
2052, 'Paid', 142, '', 0, 0, 0, 1240, '', '', '', 0, 0),
(16, 202010180852113, '', '2020-10-02', 43, 39, 112, 61, 2379, 357, 61, 0, 0, 
2379, 'Paid', 143, '151957', 0, 0, 0, 1, '', '', '', 0, 0)
1
Hamada 25 październik 2020, 21:33

1 odpowiedź

Najlepsza odpowiedź

Możesz użyć każdego zapytania jako podstawy (podzapytania) również więcej obliczeń

SELECT
    xProdID,
    xPrice,
    xProdName,
    SUM(xQuan) AS xQuan,
    SUM(xCarCount) AS xCarCount
FROM (SELECT 
    FatoraReso AS xAcc,
    AccName AS xAccName,
    FatoraDate AS xDate,
    FatoraProduct AS xProdID,
    ProductName AS xProdName,
    FatoraPurPrice AS xPrice,
    SUM(FatoraQuan) AS xQuan,
    COUNT(FatoraID) AS xCarCount
FROM
    tblfatora
        INNER JOIN
    tblaccounts ON tblaccounts.AccID = tblfatora.FatoraReso
        INNER JOIN
    tblproducts ON tblproducts.ProductID = tblfatora.FatoraProduct
GROUP BY xAcc , xDate , xProdID , xPrice 
UNION ALL SELECT 
    FatoraCustomer AS xAcc,
    AccName AS xAccName,
    FatoraDate AS xDate,
    FatoraProduct AS xProdID,
    ProductName AS xProdName,
    FatoraSalePrice AS xPrice,
    SUM(FatoraQuan) AS xQuan,
    COUNT(FatoraID) AS xCarCount
FROM
    tblfatora
        INNER JOIN
    tblaccounts ON tblaccounts.AccID = tblfatora.FatoraCustomer
        INNER JOIN
    tblproducts ON tblproducts.ProductID = tblfatora.FatoraProduct
GROUP BY xAcc , xDate , xProdID , xPrice) t1
GROUP BY 
    xProdID , xPrice
ORDER BY xProdID , xPrice

Jak napisałem w moim komentarzu.

"Isee dwie możliwości uzyskania tylko dat dla jednej lub więcej daty.

Wybór zależy od tego, czy masz szybkie połączenie i szybki serwer.

Rozwiązanie 1;:

Dostajesz wszystkie dane do tabeli i masz filtr DataView T poszukiwaniu dat.

Następnie należy podsumować dane zgodnie z Xprodidem, XPrice.

Odpowiednie, jeśli powolny połączenie lub wolno serwer bazy danych, dzięki czemu komputer robi to wszystko na stronie klienta.

Rozwiązanie 2

Wyślij do serwera Nowy Wybierz opublikowany powyżej, dodaj tylko klauzulę, która wybiera odpowiednie daty przed końcową grupą i sumą.

Działa to dobrze, kiedy wszystko jest dość szybkie.

Funkcje agregacji tracą dane, ponieważ ma tylko maksymalną datę, może to być enugh, ale nie wierzę, że wystarczy

0
nbk 26 październik 2020, 14:44