如何根据sql中的行数据更改重复列
Sql server这是我的表数据如何根据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
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组中选择公司名称、金额(数量)作为数量、金额(金额)作为金额、金额(税款)作为税款……。此查询适用于您。