當前正在嘗試創建一個查詢,該查詢會爲我提供一個由代理人每天在全年進行的銷售。我已經設法讓整個專欄工作,但是每日銷售額並不是從查看原始數據,而是總結特定代理商在一天內完成的總銷售額,而是將所有行計算在內代理列出並輸出。 代碼如下:SQL - 交叉選項卡。一個字段的總和,而不是列中的計數行
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(convert(varchar(20), [ENTRY_DATE], 106))
FROM [Sales_Data] with (NoLock)
where([ENTRY_DATE] between '01-Jan-2017' and '01-Jul-2017'
Group By [ENTRY_DATE]
order by [ENTRY_DATE]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query =
' SELECT
[Advisor_Name] AS [Advisor_Name]
,[Line_Managers_Name] AS [Line_Managers_Name]
,[SALE_TYPE]
,[Total]
,'+ @cols +'
From (
Select
sum([SALES])
over(partition by [Advisor_Name], [Line_Managers_Name], [SALE_TYPE])
[Total]
, [ENTRY_DATE]
, [Advisor_Name]
, [Line_Managers_Name]
, [SALE_TYPE]
From [Sales_Data] a with (NoLock)
) x
pivot
(
Count([ENTRY_DATE])
for [ENTRY_DATE] in (' + @cols + ')
) p
Order by [Advisor_Name], [Line_Managers_Name], [CHANNEL]
'
execute(@query)
如果我不能改變我的計劃,而不是上改變源數據給我通過網上銷售信息行,而不是聚集成加法,不幸的是有些行的查詢可能有一個客戶與-1銷售表示退款,我不知道如何適應這些,我試過選擇不同的,選擇(選擇不同.....)有count(*)= 1,但似乎沒有任何工作要做。
非常感謝你,這太棒了! 有一個小小的錯誤,如果你可以修復會很長的路要命名後面的一個孩子,是否有任何方法用0代替日期列中的NULL條目? 我們的目標是能夠將其直接複製到excel中,但隨着我在Excel中嘗試查找和替換的條目數量(大約8000名代理超過6個月)幾乎使我的系統崩潰。 – MichaelL
當然可以。任何你想要替換的列都是null,就這樣做。 ISNULL(columnName,0)。如果列ia NULL,則會重新調用0,否則重新調用列中的值。 – SQLAndOtherStuffGuy
請給孩子「戴夫」打電話! – SQLAndOtherStuffGuy