我查看了一些答案,但似乎没有一个适用于我。
基本上我有这个结果集:
RowNo | Id | OrderNo |
1 101 1
2 101 10
我只想将其转换为
| Id | OrderNo_0 | OrderNo_1 |
101 1 10
我知道我应该使用PIVOT。但是语法对我来说还不清楚。我尝试了在该社区中看到的任何内容,但似乎找不到适合我的确切用例的
。订单号始终为两个。为了使事情更清楚
答案 0 :(得分:2)
正如您说的那样,每个ID只能有两个订单号,您可以将结果集添加到ID列上。就下面的示例而言,我假设您的结果集仅从单个Orders
表中进行选择,但是用现有查询替换它应该足够容易。
SELECT o1.ID, o1.OrderNo AS [OrderNo_0], o2.OrderNo AS [OrderNo_1]
FROM Orders AS o1
INNER JOIN Orders AS o2
ON (o1.ID = o2.ID AND o1.OrderNo <> o2.OrderNo)
答案 1 :(得分:2)
如果您想使用PIVOT
,则以下内容适用于提供的数据:
declare @Orders table (RowNo int, Id int, OrderNo int)
insert into @Orders (RowNo, Id, OrderNo)
select 1, 101, 1 union all select 2, 101, 10
select Id, [1] OrderNo_0, [2] OrderNo_1
from (
select RowNo, Id, OrderNo
from @Orders
) SourceTable
pivot (
sum(OrderNo)
for RowNo in ([1],[2])
) as PivotTable
参考:https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017
答案 2 :(得分:1)
从示例数据中,最简单的方法就是尝试使用min
和MAX
函数。
SELECT Id,min(OrderNo) OrderNo_0,MAX(OrderNo) OrderNo_1
FROM T
GROUP BY Id