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