【发布时间】:2021-11-27 21:04:17
【问题描述】:
在下面的示例中,您如何总结“费用”列并制作唯一的 ControlNo?
代码示例:
IF OBJECT_ID('tempdb..#table1') IS NOT NULL
DROP TABLE #table1
CREATE TABLE #Table1
(
ControlNo INT,
Line varchar(50),
Profit INT,
Fee INT
)
INSERT INTO #Table1 (ControlNo, Line, Profit, Fee)
VALUES (1111, 'Line1', 80, 30),
(1111, 'Line2', 100, 20),
(3333, 'Line1', 200, 50),
(4444, 'Line1', 50, 10),
(4444, 'Line2', 100, 40)
-- check
--select * from #Table1
SELECT *
FROM #Table1
PIVOT
(SUM(Profit)
FOR Line IN ([Line1], [Line2])
) pvt
ORDER BY ControlNo
输出如下所示:
但需要看起来像这样:
ControlNo Fee Line1 Line2
1111 50 80 100
3333 50 200 0
4444 50 50 100
更新:
遵循戴尔的解决方案
我尽可能地模仿真实数据,但由于某种原因,81 的 TerrPrem 正在消失?
IF OBJECT_ID('tempdb..#table1') IS NOT NULL DROP TABLE #table1
Create table #Table1 ( Guid uniqueidentifier, ControlNo int, Line varchar(50), Prem INT, TerrPrem int )
INSERT INTO #Table1 (Guid, ControlNo, Line, Prem, TerrPrem)
VALUES ('169E54D8-F00A-43B8-9268-5DD3F5684C5A',4395768, 'Commercial General Liability',10987,0),
('169E54D8-F00A-43B8-9268-5DD3F5684C5A',4395768, 'Commercial General Liability',81,81),
('169E54D8-F00A-43B8-9268-5DD3F5684C5A',4395768, 'Contractors Pollution Liability',1013,0),
('169E54D8-F00A-43B8-9268-5DD3F5684C5A',4395768, 'Contractors Pollution Liability',81,81)
-- check
--select * from #Table1
select *
from #Table1
PIVOT(
SUM(Prem)
FOR Line IN ([Commercial General Liability],
[Contractors Pollution Liability])
) as PivotTable
为什么其中一个 TerrPrem 消失了?
Guid ControlNo TerrPrem Commercial General Liability Contractors Pollution Liability
169E54D8-F00A-43B8-9268-5DD3F5684C5A 4395768 0 10987 1013
169E54D8-F00A-43B8-9268-5DD3F5684C5A 4395768 81 81 81
【问题讨论】:
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
正如我已经评论过的,请停止使用图像作为数据,尤其是异地图像。只需将数据格式化为代码或表格文本。
-
您希望从新数据中得到什么结果?
-
我预计 TerrPrem 的总价为 162 美元。 81+81之和
-
你也没有向我们展示你正在使用的实际代码......
标签: sql sql-server tsql pivot