【发布时间】:2018-09-19 20:18:24
【问题描述】:
我见过this question、this 和this,但这些不是我想要的。
请不要关闭我的问题,因为它不是重复的。这对我来说真的很重要。
我的示例数据是(这只是一个示例,OperatorX 和 OC 列应该是 50 次):
DECLARE @OperatorPrice TABLE (ID INT NOT NULL, OperatorId INT NULL, Price
NUMERIC(18,3) NULL, FName VARCHAR(50) NULL)
INSERT INTO @OperatorPrice (
ID, OperatorId, Price, FName
)
VALUES
(226, 996, 22954,'Operator1')
, (266, 1016, 79011.2, 'Operator3')
, (112, 1029, 14869, 'Operator4')
, (93, 1031, 10568.96, 'Operator5')
DECLARE @TR TABLE
(
ID INT NULL ,
Operator1 DECIMAL(18,3) NULL, OC1 DECIMAL(18,3) NULL, Operator2 DECIMAL(18,3) NULL,
OC2 DECIMAL(18,3) NULL, Operator3 DECIMAL(18,3) NULL, OC3 DECIMAL(18,3) NULL,
Operator4 DECIMAL(18,3) NULL, OC4 DECIMAL(18,3) NULL, Operator5 DECIMAL(18,3) NULL,
OC5 DECIMAL(18,3) NULL
)
示例代码:
INSERT @TR
(ID ,
Operator1, OC1, Operator2, OC2, Operator3, OC3, Operator4, OC4,
Operator5, OC5)
SELECT ID ,
Operator1, OC1, Operator2, OC2, Operator3, OC3, Operator4, OC4,
Operator5, OC5
FROM
(SELECT Price, id, FName
FROM @OperatorPrice) AS SourceTable
PIVOT
(
sum(Price)
FOR FName IN (Operator1, OC1, Operator2, OC2, Operator3, OC3,
Operator4, OC4, Operator5, OC5)
) AS PivotTable
SELECT * FROM @TR
如何将数据插入OC 列?
【问题讨论】:
-
这是你昨天问的同一个问题。它仍然不清楚你想要什么。 @ 987654326@ 您将使用插入语句插入这些列...奇怪...就像您在此处发布的问题一样。但我怀疑这不是你要问的。发布 ddl 和示例数据的工作很棒,但这个问题毫无意义。
-
@Sean Lange 不一样。请仔细阅读我的问题,只是不要关闭我的问题。现在我可以插入数据,但数据应该由两列组成!请不要关闭我的帖子。
-
您会注意到我没有对此投反对票或将其标记为关闭。事实上,您在发布数据和表结构方面做得很好。我只是不明白这个问题。
-
我看到数据进入了其他列,但为什么是 Operator3 OC3?字符串运算符总是在数据中吗?这就是这里真正令人困惑的地方。有没有更好的方法来确定运营商的数量?我认为条件聚合在这里会容易得多,但我们需要一些方法来知道哪个运算符号是什么。
-
@StepUp 您可以使用条件聚合非常轻松地做到这一点。给出一个很好的理由说明您引用的第三个问题对您没有帮助:stackoverflow.com/a/44030551/1507566 只需稍加思考即可将其应用于两列而不是一列。
标签: sql-server tsql pivot