0

关于我尝试在 SQL Server Management Studio 2008 中编写的查询的问题。我正在拉 2 行。第一行是标题信息,第二行是某个行项目的信息。请记住,实际的标题信息读作“Column 0, 1, 2, 3, 4,.... etc.”

数据看起来像这样:

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。我该怎么做才能使这些列不出现?

4

1 回答 1

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/other 代码读取和显示值。

于 2013-02-05T22:23:16.630 回答