关于我正在尝试在SQL Server Management Studio 2008中编写的查询的问题。我正在拉2行。第一行是标题信息,第二行是特定行项目的信息。请记住,实际的标题信息读作“第0,1,2,3,4 ......等列”。
数据看起来像这样:
ROW 1: Model # | Item Description| XS | S | M | L | XL|
ROW 2: 3241 | Gray Sweatshirt| | 20 | 20 | 30 | |
基本上,这表明该特定项目有20个小型,20个中型和30个大型。没有XS或XL。
我想创建一个子查询,将这些信息放在一行中,但同时,在XS和XL尺寸下显示空白数量的大小。
我想让它看起来像这样说完了所有内容:
ROW 1: MODEL #| 3241 | ITEM DESCRIPTION | Gray Sweatshirt | S | 10 | M | 20 | L | 30 |
请注意,不包含XS或XL。我该怎么做才能使这些列不显示?
答案 0 :(得分:0)
由于您没有发布您的查询,也没有发布您的表结构,我想它是列Id,描述,大小。如果是这样,您可以执行此操作,只需替换为您的表和列名称:
DECLARE @columns varchar(8000)
SELECT @columns = COALESCE (@columns + ',[' + cast(Size as varchar) + ']', '[' + cast(Size as varchar) + ']' )
FROM YourTableName
WHERE COUNT(Size) > 0
DECLARE @query varchar(8000) = 'SELECT Id, Description, '
+ @columns +'
FROM
(SELECT Id, Description, Size
FROM YourTableName) AS Source
PIVOT
(
COUNT(Size)
FOR Size IN ('+ @columns +')
) AS Pvt'
EXEC(@query)
无论如何,我也同意@MichaelFredickson。我已经实现了这个透视解决方案,但是在从SQL中提取原始数据之后让表示层处理这个问题绝对更好。如果没有,您将处理数据两次,一个用SQL创建表,另一个用于在使用c#/ vb /其他代码读取和显示值时在演示文稿中。