0
データベースから請求書情報を引き出し、4つの異なる広告申込情報を合計して月別にグループ化するクエリを実行しています。このクエリは、JOIN
の3つのテーブル:CustomerAccount
,Invoice
およびInvoiceDetail
を含む。クエリを実行すると正しい情報が得られますが、各列が1つの値を持つ4つの行に分割され、残りはNULL
です。それらの行がすべて1つの行に表示されるように行を結合するにはどうすればよいですか?私がでてるSELECTサブクエリのSUMを結合し、NULLSを持つ行を結合する
| Account# | Branch | Department | Date | Name | Delvry | Storage | Ret/Ref | Shredding
| 1000 | MAIN | TAX | 2016-01 | Acme | $50.00 | $200.00 | $124.00 | $12.75
:私はそれは次のようになりたい
| Account# | Branch | Department | Date | Name | Delvry | Storage | Ret/Ref | Shredding
| 1000 | MAIN | TAX | 2016-01 | Acme | $50.00 | NULL | NULL | NULL
| 1000 | MAIN | TAX | 2016-01 | Acme | NULL | $200.00 | NULL | NULL
| 1000 | MAIN | TAX | 2016-01 | Acme | NULL | NULL | $124.00 | NULL
| 1000 | MAIN | TAX | 2016-01 | Acme | NULL | NULL | NULL | $12.75
:
はSELECT
[Client].[CustID] AS [Account#],
[Client].[Branch] AS [Branch],
[Client].[Dept] AS [Department],
CONCAT(DATEPART(YEAR, [dbo].[Invoice].[Date]), '-', RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(MONTH, [dbo].[Invoice].[Date])), 2)) AS [Date],
[Client].[Name],
(SELECT FORMAT(SUM([InvDetail].[SubTotal]), 'C', 'en-us') WHERE [InvDetail].[Description] = 'Delivery/Pickup') AS [Dlvry],
(SELECT FORMAT(SUM([InvDetail].[SubTotal]), 'C', 'en-us') WHERE [InvDetail].[Description] = 'File Storage') AS [Storage],
(SELECT FORMAT(SUM([InvDetail].[SubTotal]), 'C', 'en-us') WHERE [InvDetail].[Description] = 'BOX RETRIEVAL' OR [InvDetail].[Description] = 'BOX RETFILE') AS [Ret/Ref],
(SELECT FORMAT(SUM([InvDetail].[SubTotal]), 'C', 'en-us') WHERE [InvDetail].[Description] LIKE 'Shredding%') AS [Shredding],
FORMAT(SUM([InvDetail].[SubTotal]), 'C', 'en-us') AS [SubTotal],
FORMAT(SUM([InvDetail].[GST]), 'C', 'en-us') AS [GST],
FORMAT(SUM([InvDetail].[PST]), 'C', 'en-us') AS [PST],
FORMAT(SUM([InvDetail].[Total]), 'C', 'en-us') AS [Total]
FROM [dbo].[CustomerAccount] AS [Client] LEFT JOIN [dbo].[Invoice]
ON [Client].[CustID] = [dbo].[Invoice].[CustID]
LEFT JOIN [dbo].[InvoiceDetail] AS [InvDetail]
ON [dbo].[Invoice].[InvoiceNumber] = [InvDetail].[InvoiceNumber]
WHERE DATEPART(YEAR, [dbo].[Invoice].[Date]) >= 2015
AND DATEPART(YEAR, [dbo].[Invoice].[Date]) <= 2017
AND [Acct] = @ACCOUNT#
AND [Branch] = @BRANCH
AND [Dept] = @DEPARTMENT
GROUP BY [Client].[CustID],
[Client].[Branch],
[Client].[Dept],
[Client].[Name],
DATEPART(YEAR, [dbo].[Invoice].[Date]),
DATEPART(MONTH, [dbo].[Invoice].[Date]),
[InvDetail].[Description]
ORDER BY [Client].[CustID]
クエリの結果は次のようになります。ここでは
は私のクエリですどのように進行するかについての損失。
投稿したクエリ結果がクエリと一致しません。 – Squirrel
を削除してください[dbo]。[InvoiceDetail]。[説明] 'GROUP BY – Squirrel
から削除することをお勧めします。plz use [テーブルのエイリアス](https://www.w3schools.com/sql/sql_alias.asp) –