当前正在尝试创建一个查询,该查询会为我提供一个由代理人每天在全年进行的销售。我已经设法让整个专栏工作,但是每日销售额并不是从查看原始数据,而是总结特定代理商在一天内完成的总销售额,而是将所有行计算在内代理列出并输出。 代码如下: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