如果没有值,如何排除列显示?

时间:2013-02-05 18:42:09

标签: tsql ssms

关于我正在尝试在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。我该怎么做才能使这些列不显示?

1 个答案:

答案 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 /其他代码读取和显示值时在演示文稿中。