簡體   English   中英

將兩個選擇合並為4列

[英]Joining two selects into 4 columns

我正在嘗試將兩個select語句連接起來以在一個表中形成4列。 我想要的結果將是這樣的

+--------------+----------------+------------------+--------------+
| ExpectedDate | ExpectedAmount |    ActualDate    | ActualAmount |
+--------------+----------------+------------------+--------------+
| 01/03/2014   |          65161 | 2014-03-01 00:00 | 57           |
| 02/03/2014   |             64 | 2014-03-02 00:00 | 321651651    |
| 03/03/2014   |              8 | 2014-03-03 00:00 | 233258646    |
| 04/03/2014   |            561 | 2014-03-04 00:00 | 2321         |
| 05/03/2014   |         651651 | 2014-03-05 00:00 | 8494561      |
| 06/03/2014   |      651616131 | NULL             | NULL         |
| 07/03/2014   |      316548478 | NULL             | NULL         |
| 08/03/2014   |      646512132 | NULL             | NULL         |
| 10/03/2014   |      654984984 | NULL             | NULL         |
| 11/03/2014   |      323213218 | NULL             | NULL         |
| 12/03/2014   |        6464651 | NULL             | NULL         |
| 13/03/2014   |         313218 | NULL             | NULL         |
| 14/03/2014   |         849898 | NULL             | NULL         |
| 15/03/2014   |        3213218 | NULL             | NULL         |
| 16/03/2014   |        9898465 | NULL             | NULL         |
+--------------+----------------+------------------+--------------+

目前,我有以下SQL,它們非常接近,但它們卻不在同一行中,而是像這樣拆分:

+--------------+----------------+------------------+--------------+
| ExpectedDate | ExpectedAmount |    ActualDate    | ActualAmount |
+--------------+----------------+------------------+--------------+
| 01/03/2014   | 65161          | NULL             | NULL         |
| 02/03/2014   | 64             | NULL             | NULL         |
| 03/03/2014   | 8              | NULL             | NULL         |
| 04/03/2014   | 561            | NULL             | NULL         |
| 05/03/2014   | 651651         | NULL             | NULL         |
| 06/03/2014   | 651616131      | NULL             | NULL         |
| 07/03/2014   | 316548478      | NULL             | NULL         |
| 08/03/2014   | 646512132      | NULL             | NULL         |
| 10/03/2014   | 654984984      | NULL             | NULL         |
| 11/03/2014   | 323213218      | NULL             | NULL         |
| 12/03/2014   | 6464651        | NULL             | NULL         |
| 13/03/2014   | 313218         | NULL             | NULL         |
| 14/03/2014   | 849898         | NULL             | NULL         |
| 15/03/2014   | 3213218        | NULL             | NULL         |
| 16/03/2014   | 9898465        | NULL             | NULL         |
| NULL         | NULL           | 2014-03-01 00:00 | 57           |
| NULL         | NULL           | 2014-03-02 00:00 | 321651651    |
| NULL         | NULL           | 2014-03-03 00:00 | 233258646    |
| NULL         | NULL           | 2014-03-04 00:00 | 2321         |
| NULL         | NULL           | 2014-03-05 00:00 | 8494561      |
+--------------+----------------+------------------+--------------+

這是SQL:

--DECLARE PERIOD
DECLARE @NextMonthDate VARCHAR(10)
DECLARE @currentMonthDate VARCHAR(10)
DECLARE @VarientVar VARCHAR(10)
DECLARE @ExpectedDateSample VARCHAR(10)

--SET PERIOD
SET @NextMonthDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+SUBSTRING(CONVERT(VARCHAR, DATEADD(MONTH, +1, GETDATE()), 112),5,2)
SET @currentMonthDate = CONVERT(VARCHAR(4), DATEPART(YEAR, GETDATE()))+'-'+SUBSTRING(CONVERT(VARCHAR, DATEADD(MONTH, +0, GETDATE()), 112),5,2)
SET @ExpectedDateSample = SUBSTRING(CONVERT(VARCHAR, DATEADD(MONTH, +0, GETDATE()), 112),5,2)+'/'+CONVERT(VARCHAR(4), DATEPART(YEAR, GETDATE()))

SELECT e.ExpectedDate, e.ExpectedAmount, a.ActualDate, a.ActualAmount
FROM (SELECT ExpectedDate, SUM(ExpectedPayment) ExpectedAmount
FROM Simplicity..V_PaymentPlan2
WHERE Period >= @currentMonthDate and Period < @NextMonthDate AND HyphenStatus != 'Unpaid' AND ExpectedDate LIKE '%'+@ExpectedDateSample+'%'
GROUP BY ExpectedDate) e
FULL JOIN
(SELECT CONVERT(VARCHAR, PaymentDate, 20) ActualDate, SUM(ActualPayment) ActualAmount
FROM Simplicity..V_PaymentPlan2
WHERE Period >= @currentMonthDate and Period < @NextMonthDate AND HyphenStatus != 'Unpaid' AND CONVERT(VARCHAR, PaymentDate, 20) LIKE '%'+@currentMonthDate+'%'
GROUP BY PaymentDate) a on a.ActualDate = e.ExpectedDate
ORDER BY e.ExpectedDate, a.ActualDate

任何想法如何使它們在同一行中排成一行,而不是插入NULL並向下推?

我沒有任何主鍵或外鍵。

SELECT ExpectedDate,ExpectedAmount, ActualDate, ActualAmount FROM A a1 
   INNER JOIN A a2
ON a1.ExpectedDate = a2.ActualDate

暫無
暫無

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

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