簡體   English   中英

將兩個查詢的 output 合並為一個查詢

[英]Combine the output of two queries into a single query

我想將以下查詢組合成一個 output,我不確定如何使用聯合,因為我在查詢上也有一堆條件。 在最后的 output 中,我還需要從查詢 1 的凈值列中減去查詢 2 的negative_sales 列的結果

SELECT storenumber,
       bbbtendertypetext,
       SUM(financialamounttendered) - SUM(financialchangeamount) AS NET_VALUE,
       COUNT(transactionid) AS Transaction_Count
FROM   [AceTLogData].[Tlog].[tender]
WHERE  transactiondatetime > '2022-09-21 00:00:00.000'
       AND transactiondatetime < '2022-09-22 00:03:00.000'
GROUP  BY storenumber, bbbtendertypetext
ORDER  BY storenumber 

SELECT storenumber,
       bbbtendertypetext,
       SUM(financialamounttendered) AS negative_Net_Sales,
       COUNT(transactionid) AS Transaction_Count
FROM   [AceTLogData].[Tlog].[tender_correct]
       where transactiondatetime > '2022-09-21 00:00:00.000'
       AND transactiondatetime < '2022-09-22 00:03:00.000'
GROUP  BY storenumber, bbbtendertypetext
ORDER  BY storenumber 

例如這樣

select s1.storenumber storenumber
     , s2.storenumber storenumber2
     , s1.bbbtendertypetext bbbtendertypetext
     , s2.bbbtendertypetext bbbtendertypetext2
     , s1.NET_VALUE  NET_VALUE
     , s1.Transaction_Count Transaction_Count
     , s2.Transaction_Count Transaction_Count2
     , s2.negative_Net_Sales negative_Net_Sales
     , s1.NET_VALUE - s2.negative_Net_Sales differnt
from (
    SELECT storenumber,
           bbbtendertypetext,
           SUM(financialamounttendered) - SUM(financialchangeamount) AS NET_VALUE,
           COUNT(transactionid) AS Transaction_Count
    FROM   [AceTLogData].[Tlog].[tender]
    WHERE  transactiondatetime > '2022-09-21 00:00:00.000'
           AND transactiondatetime < '2022-09-22 00:03:00.000'
    GROUP  BY storenumber, bbbtendertypetext
    ORDER  BY storenumber 
) s1 left join (
    SELECT storenumber,
           bbbtendertypetext,
           SUM(financialamounttendered) AS negative_Net_Sales,
           COUNT(transactionid) AS Transaction_Count
    FROM   [AceTLogData].[Tlog].[tender_correct]
           AND transactiondatetime > '2022-09-21 00:00:00.000'
           AND transactiondatetime < '2022-09-22 00:03:00.000'
    GROUP  BY storenumber, bbbtendertypetext
    ORDER  BY storenumber
) s2 on s1.storenumber = s2.storenumber

請注意,第二個查詢中沒有 where 部分

該查詢以某種方式工作,但它給了我重復的結果。 將嘗試對其進行調整。 bbbtendertypetext bbbtendertypetext2 NET_VALUE AmericanExpress AmericanExpress 2067.16 AmericanExpress Cash 2067.16 AmericanExpress Mastercard 2067.16 AmericanExpress MDSE Credit 2067.16

假設您想組合查詢ASUM值和上面的查詢B (唯一值SUM GROUPED BY storenumberbbbtendertypetext ),您可以使用兩個CTE然后在storenumber它們INNER JOIN來獲取結果集並從那里。

如果您想要一個更加非聚合的結果集,請從CTE下方的主查詢中刪除GROUP BYSUM

WITH a AS (SELECT storenumber,
       bbbtendertypetext,
       transactiondatetime,
       SUM(financialchangeamount) AS charge_amount,
       COUNT(transactionid) AS Transaction_Count
FROM   [AceTLogData].[Tlog].[tender]
  GROUP  BY storenumber, bbbtendertypetext, transactiondatetime),
     b AS (SELECT storenumber,
       bbbtendertypetext,
       transactiondatetime,
       SUM(financialamounttendered) AS negative_Net_Sales,
       COUNT(transactionid) AS Transaction_Count
FROM   [AceTLogData].[Tlog].[tender_correct]
   GROUP  BY storenumber, bbbtendertypetext, transactiondatetime)
SELECT a.storenumber,
       a.bbbtendertypetext,
       SUM(a.charge_amount) AS charge_amount,
       SUM(b.negative_Net_Sales) AS negative_Net_Sales ,
       SUM(a.charge_amount - b.negative_Net_Sales) AS NET_VALUE,
       SUM(a.Transaction_Count) AS Transaction_Count
FROM a INNER JOIN b ON a.storenumber = b.storenumber
WHERE  a.transactiondatetime 
  BETWEEN '2022-09-21 00:00:00.000' AND  '2022-09-22 00:03:00.000'
GROUP BY a.storenumber, a.bbbtendertypetext

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM