1

我有 2 个这样的子句:

WITH T
     AS (SELECT tfsp.SubmissionID,
                tfsp.Amount,
                tfsp.campaignID,
                cc.Name
         FROM   tbl_FormSubmissions_PaymentsMade tfspm
                INNER JOIN tbl_FormSubmissions_Payment tfsp
                  ON tfspm.SubmissionID = tfsp.SubmissionID
                INNER JOIN tbl_CurrentCampaigns cc
                  ON tfsp.CampaignID = cc.ID
         WHERE  tfspm.isApproved = 'True'
                AND tfspm.PaymentOn >= '2013-05-01 12:00:00.000' AND tfspm.PaymentOn <= '2013-05-07 12:00:00.000')
SELECT SUM(Amount) AS TotalAmount,
       campaignID,
       Name
FROM   T
GROUP  BY campaignID,
          Name; 

并且:

WITH T1
     AS (SELECT tfsp.SubmissionID,
                tfsp.Amount,
                tfsp.campaignID,
                cc.Name
         FROM   tbl_FormSubmissions_PaymentsMade tfspm
                INNER JOIN tbl_FormSubmissions_Payment tfsp
                  ON tfspm.SubmissionID = tfsp.SubmissionID
                INNER JOIN tbl_CurrentCampaigns cc
                  ON tfsp.CampaignID = cc.ID
         WHERE  tfspm.isApproved = 'True'
                AND tfspm.PaymentOn >= '2013-05-08 12:00:00.000' AND tfspm.PaymentOn <= '2013-05-14 12:00:00.000')
SELECT SUM(Amount) AS TotalAmount,
       campaignID,
       Name
FROM   T1
GROUP  BY campaignID,
          Name; 

现在我想加入两个输出的结果。我该怎么做?

编辑:还添加了 <= 条款。

我的第一个 T 的结果:

Amount-----ID----Name
1000----- 2-----Annual Fund
83--------1-----Athletics Fund
300-------3-------Library Fund

我的 T2 结果

850-----2-------Annual Fund
370-----4-------Other

我需要的输出:

1800-----2------Annual Fund
83-------1------Athletics Fund
300------3-------Library Fund
370------4-----Other
4

3 回答 3

2

你不需要加入。您可以使用

SELECT SUM(tfspm.PaymentOn) AS Amount,
       tfsp.campaignID,
       cc.Name
FROM   tbl_FormSubmissions_PaymentsMade tfspm
       INNER JOIN tbl_FormSubmissions_Payment tfsp
         ON tfspm.SubmissionID = tfsp.SubmissionID
       INNER JOIN tbl_CurrentCampaigns cc
         ON tfsp.CampaignID = cc.ID
WHERE  tfspm.isApproved = 'True'
       AND ( tfspm.PaymentOn BETWEEN '2013-05-01 12:00:00.000' 
                                 AND '2013-05-07 12:00:00.000'
              OR tfspm.PaymentOn BETWEEN '2013-05-08 12:00:00.000' 
                                     AND '2013-05-14 12:00:00.000' )
GROUP  BY tfsp.campaignID,
          cc.Name 
于 2013-05-23T14:16:22.850 回答
1

如果我是对的,在 WITH 子句之后,您必须立即选择其结果。因此,恕我直言,实现两者结合的最佳尝试是将它们中的每一个保存到一个临时表中,然后将这两者的内容结合在一起。

更新:重新阅读您的问题后,我意识到您可能不想要(SQL-)连接,而只是将您的 2 个结果打包在一起,因此您可以通过我上面描述的内容轻松实现这一点,只需选择内容两个临时表并在它们之间放置一个 UNION。

于 2013-05-23T14:09:19.330 回答
0

我想错了。谢谢您的帮助。这就是我实现我想要的东西的方式:

WITH 
T AS (
SELECT tfsp.SubmissionID , Amount1 =
CASE
WHEN tfspm.PaymentOn  >= '2013-01-10 11:34:54.000' AND tfspm.PaymentOn <= '2013-04-10 11:34:54.000' THEN tfsp.Amount
END
, Amount2 = 
CASE
WHEN tfspm.PaymentOn  >= '2013-05-01 11:34:54.000' AND tfspm.PaymentOn <= '2013-05-23 11:34:54.000' THEN tfsp.Amount
END
 , tfsp.campaignID , cc.Name FROM tbl_FormSubmissions_PaymentsMade tfspm 
INNER JOIN tbl_FormSubmissions_Payment tfsp ON tfspm.SubmissionID = tfsp.SubmissionID 
INNER JOIN tbl_CurrentCampaigns cc ON tfsp.CampaignID = cc.ID
WHERE tfspm.isApproved = 'True'   

)
SELECT ISNULL(SUM(Amount1),0) AS TotalAmount1, ISNULL(SUM(Amount2),0) AS TotalAmount2, campaignID , Name FROM T  GROUP BY campaignID, Name;
于 2013-05-23T15:07:18.293 回答