【发布时间】:2017-02-12 10:02:52
【问题描述】:
我正在使用 SQL Server 2012,但不确定解决问题的最佳方法。这是我的数据:
Item Size SortOrder Qty
ABC XS 1 0
ABC S 2 8
ABC M 3 4
ABC L 4 3
ZXY 1 1 10
DEF 6 1 5
DEF 8 2 4
DEF 10 3 7
DEF 12 4 6
QWE 1 1 5
但是,我需要以网格格式呈现,并且大小需要随着标题动态变化:
ABC XS S M L
Qty 0 8 4 3
ZXY 1
Qty 10
DEF 6 8 10 12
Qty 5 4 7 6
QWE 1
Qty 5
我还需要将数量分配给适当的大小,并且大小必须始终按照排序顺序从左到右显示。
最好的方法是什么?创建数组还是可以在枢轴中实现上述目标?
谢谢。
我尝试使用以下内容进行旋转,但不断收到错误“列名无效”:
DECLARE @SizeColums VARCHAR(MAX)
SELECT @SizeColums = COALESCE(@SizeColums + ',','') + QUOTENAME([Size])
FROM vw_SizeSeq
GROUP BY [Size]
DECLARE @Sql NVARCHAR(MAX) = N'
SELECT Item,
[Types],' +
@SizeColums + '
FROM (SELECT * FROM vw_SizeSeq
) t
UNPIVOT (
[Type]
FOR [Types] IN ([Item])) up
PIVOT (
MAX([Type])
FOR [Size] IN (' + @SizeColums + ')
) p
'
EXEC sp_executesql @sql;
【问题讨论】:
-
在 SQL 中,我们只能生成表格格式的结果,但您的预期结果看起来有些不同。为此尝试应用层
-
它们必须是一种旋转和反旋转的方式
-
可能是我不理解您的预期结果格式。你能说得更清楚一些吗
-
把它想象成一个网格\枢轴\交叉表,其中的大小需要是动态的
标签: sql arrays sql-server dynamic pivot