如何根据sql中的行数据更改重复列

如何根据sql中的行数据更改重复列,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,Sql server这是我的表数据 Companyname Qty Amount tax A 1 2 2 A 2 4 2 B 1 2 3 C 1 2 2 C 3 2 2 这是我的例外输出 A B

Sql server这是我的表数据

Companyname  Qty  Amount   tax
A             1      2      2
A             2      4      2
B             1      2      3
C             1      2      2
C             3      2      2
这是我的例外输出

        A                  B                C
Qty  Amount   tax | Qty  Amount   tax  | Qty  Amount   tax
3       6      4     1       2     3      4      4      4

公司可以增加

如果你想每个公司增加一行,这是一个简单的
分组

SELECT Companyname, SUM(Qty) Qty, SUM(Amount) Amount, SUM(tax) tax
FROM myTable
GROUP BY Companyname

如果您真的希望按照预期的输出结果将所有内容放在一行中,则很可能需要动态SQL,尤其是如果您希望公司名称位于列名上方的一行中。这将使您的查询更加复杂。

您可以使用动态SQL:

DECLARE @Cols NVARCHAR(MAX) = STUFF((SELECT DISTINCT ',' + QUOTENAME(CompanyName + Col)
                                    FROM    T
                                            CROSS JOIN 
                                            (   VALUES 
                                                    ('_Qty'), 
                                                    ('_Amount'), 
                                                    ('_Tax')
                                            ) c (col)
                                    FOR XML PATH(''), TYPE
                                    ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');

DECLARE @SQL NVARCHAR(MAX) = 
    '   SELECT  *
        FROM    (   SELECT  [Col] = CompanyName + ''_'' + col,
                            Value
                    FROM    T
                            UNPIVOT
                            (   Value
                                FOR Col IN ([Qty], [Amount], [Tax])
                            ) Upvt
                ) t
                PIVOT
                (   SUM(Value)
                    FOR [Col] IN (' + @cols + ')
                ) pvt;'

EXECUTE SP_EXECUTESQL @SQL;


然而我的建议是不要使用这个。在应用程序端处理这样的数据透视。

全部在一行中?每个公司没有一行?请按公司名称从tablename组中选择公司名称、金额(数量)作为数量、金额(金额)作为金额、金额(税款)作为税款……。此查询适用于您。