我想在 SQL Server 中使用 UNION 和 Group ignore 0

这是我的代码

DeclARE @Fromdate date = '2021-06-5';
DeclARE @Todate date = '2021-06-5';
DeclARE @till01 varchar(200) = 'ST-LO-01';
DeclARE @till02 varchar(200) = 'ST-LO-02';
DeclARE @till03 varchar(200) = 'ST-LO-03';
DeclARE @till04 varchar(200) = 'ST-LO-04';
DeclARE @till05 varchar(200) = 'ST-LO-05';
DeclARE @till06 varchar(200) = 'ST-LO-06';

SELECT Srt.TRANSDATE,Srt.TERMINAL AS TILL,IsnULL(COUNT(Srt.TRANSactIONID),0) AS Total_Inv,0 AS Empty_Info
FROM RetaILTRANSactIONTABLE Srt
    LEFT JOIN RetailTransactionInfoCodeTrans Cinf ON Cinf.TRANSactIONID = Srt.TRANSactIONID
WHERE Srt.TRANSDATE >= @Fromdate
  AND Srt.TRANSDATE <= @Todate
  AND Srt.TYPE = 2
  AND Srt.TERMINAL IN (@till01,@till02,@till03,@till04)
GROUP BY Srt.TRANSDATE,Srt.TERMINAL
UNION
SELECT Srt.TRANSDATE,0 AS TOTAL,0) AS EMPTY
FROM RetaILTRANSactIONTABLE Srt
    LEFT JOIN RetailTransactionInfoCodeTrans Cinf ON Cinf.TRANSactIONID = Srt.TRANSactIONID
WHERE Srt.TRANSDATE >= @Fromdate
  AND Srt.TRANSDATE <= @Todate
  AND Srt.TYPE = 2
  AND Srt.TERMINAL IN (@till01,@till04)
  AND Cinf.information IS NULL
GROUP BY Srt.TERMINAL,Srt.TRANSDATE
ORDER BY Srt.TRANSDATE,Srt.TERMINAL,Empty_Info ASC;

结果是:

TRANSDATE 直到 Total_Inv Empty_Info
2021-06-05 ST-LO-01 197 0
2021-06-05 ST-LO-01 0 2
2021-06-05 ST-LO-02 175 0
2021-06-05 ST-LO-02 0 4
2021-06-05 ST-LO-03 240 0
2021-06-05 ST-LO-03 0 9
2021-06-05 ST-LO-04 207 0
2021-06-05 ST-LO-04 0 9

我想要这个结果:

TRANSDATE 直到 Total_Inv Empty_Info
2021-06-05 ST-LO-01 197 2
2021-06-05 ST-LO-02 175 4
2021-06-05 ST-LO-03 240 9
2021-06-05 ST-LO-04 207 9
guxiaoke0510 回答:我想在 SQL Server 中使用 UNION 和 Group ignore 0

看来您应该只使用一些条件聚合:

SELECT Srt.TRANSDATE,Srt.TERMINAL AS TILL,COUNT(Srt.TRANSACTIONID) AS Total_Inv,--Count can return 0 already,no need for the ISNULL
       COUNT(CASE WHEN Cinf.information  IS NULL THEN Srt.TRANSACTIONID END) AS Empty_Info
FROM RETAILTRANSACTIONTABLE Srt
    LEFT JOIN RetailTransactionInfoCodeTrans Cinf ON Cinf.TRANSACTIONID = Srt.TRANSACTIONID
WHERE Srt.TRANSDATE >= @Fromdate
  AND Srt.TRANSDATE <= @Todate
  AND Srt.TYPE = 2
  AND Srt.TERMINAL IN (@till01,@till02,@till03,@till04)
GROUP BY Srt.TRANSDATE,Srt.TERMINAL;
本文链接:https://www.f2er.com/276927.html

大家都在问