0
我有动态透视列的查询, 我需要工会也有我的grandtotal
在底部, 问题是列在底部数成为联合不等于具有数据透视列的列数。我如何将列添加到我的grandtotal列中以在pivot列上进行联合,以便它们可以联合?如何动态空字段添加为列在SQL Server
ALTER procedure [dbo].[davehot]
(
@article as varchar(10)
)
as
begin
DECLARE @sizenameS NVARCHAR (MAX)
SELECT @sizenameS = COALESCE(@sizenameS + ', ','') + QUOTENAME(SizeName)
FROM
( select DISTINCT SIZESET.SizeSetID, SizeName
from SIZESET
left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID
left join DESIGN on DESIGN.DesignID = SIZESET.DesignID
left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = @article
)src2
ORDER BY SizeSetID
DECLARE @DownDownDown NVARCHAR (MAX)
SELECT @DownDownDown = COALESCE(@DownDownDown + 'ISNULL([' + CAST (SizeName AS VARCHAR) +'],0) + ', 'ISNULL([' + CAST(SizeName AS VARCHAR)+ '],0) + ')
FROM
( select DISTINCT SIZESET.SizeSetID, SizeName
from SIZESET
left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID
left join DESIGN on DESIGN.DesignID = SIZESET.DesignID
left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = @article
)src3
ORDER BY SizeSetID
SET @DownDownDown = LEFT (@DownDownDown, LEN (@DownDownDown)-1)
DECLARE @ToTheLeft NVARCHAR(MAX)
SELECT @ToTheLeft = COALESCE(@ToTheLeft + ',SUM([' + CAST(SizeName AS VARCHAR)+'])', 'SUM([' + CAST(SizeName AS VARCHAR)+'])')
FROM
( select DISTINCT SIZESET.SizeSetID, SizeName
from SIZESET
left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID
left join DESIGN on DESIGN.DesignID = SIZESET.DesignID
left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = @article
)src
ORDER BY SizeSetID
Declare @price nvarchar(max)
select @price = COALESCE(@price + ',' +''''+ CAST(Price AS VARCHAR)+'''', '''' + CAST(Price AS VARCHAR)+'''')
FROM
( select price from pricesizeset
join article on ARTICLE.ControlNo = PRICESIZESET.ControlNo
where ARTICLE.ArticleNo = @article
)price
DECLARE @TOTPRICE nvarchar(max)
declare @grandtotal nvarchar(max)
select @grandtotal = coalesce(@grandtotal + ', ', cast(sum(total) as nvarchar))
from(
select (price*quantity) as total
from
(
SELECT distinct(SIZESET.SizeSetID),price, sum(quantity) as [quantity]
FROM SIZESET LEFT JOIN PRICESIZESET ON PRICESIZESET.SizeSetID = SIZESET.SizeSetID
JOIN ARTICLE ON ARTICLE.ControlNo = PRICESIZESET.ControlNo JOIN DESIGN ON DESIGN.DesignID = ARTICLE.DesignID
JOIN SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
WHERE ARTICLE.ArticleNo = 'EZT02'
GROUP BY SIZESET.SizeSetID, price
)tab
)TOTPRICE
select(@grandtotal)
DECLARE @JerryPogi NVARCHAR (MAX)
SET @JerryPogi = 'SELECT *, ('+ @DownDownDown + ') AS [Date Total] INTO #Pansamantala
FROM
(
select DISTINCT ShipmentSched.ShipmentSchedId, CONVERT(varchar(10), StartDate, 110) as [Start Date], CONVERT(varchar(10), EndDate, 110) as [End Date], SizeName, Quantity
from SIZESET
left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID
left join DESIGN on DESIGN.DesignID = SIZESET.DesignID
left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = '''[email protected]+'''
) JerryGwapo
PIVOT
(
SUM(Quantity)
FOR SizeName
IN('[email protected] +')
) JerryHot
ORDER BY [Start Date]
SELECT * FROM #Pansamantala
UNION ALL
SELECT '''','''',''Size Total'','[email protected] +', isnull(SUM([Date Total]),0) FROM #Pansamantala
UNION ALL
SELECT
'''', '''','''','[email protected]+',''''
union
select
'''','''','''','[email protected] +','''' from #pansamantala
DROP TABLE #Pansamantala'
exec(@JerryPogi)
end
exec davehot'EZT02'
好的,我会尝试:) – Dave
请注意,我的解决方案不是100%准确。我只提供一个指导方针。我甚至可以看到,我没有将REPLICATE添加到UNION语句之一。请微调它 – cha
请注意,我已经更新了我的答案。 REPLICATE实际上应该有这样的语法:'REPLICATE('''',',number)' – cha