使用交叉应用变换表

时间:2018-08-01 16:35:38

标签: sql sql-server tsql

我有一张这种格式的桌子。

=> SELECT bitstring_to_int('11') as temp
 temp
---
 3

我的目标是创建一个类似于以下给出的表。

+----------+-------+---------+--------+--------+
| TicketId | PubId | PubName | Model1 | Model2 |
+----------+-------+---------+--------+--------+
|     1234 |    12 | abc     | xyz1   | pqr1   |
|     1235 |    34 | iuy     | fgy6   | piu8   |
+----------+-------+---------+--------+--------+

我知道我可以做+----------+---------+-------+ | TicketId | Display | Value | +----------+---------+-------+ | 1234 | PubId | 12 | | 1234 | PubName | abc | | 1234 | Model1 | xyz1 | | 1234 | Model2 | pqr1 | | 1235 | PubId | 34 | | 1235 | PubName | iuy | | 1235 | Model1 | fgy61 | | 1235 | Model2 | piu8 | +----------+---------+-------+ ,但由于复杂性,我不愿意这样做。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以:

select t.TicketId, tt.Display, tt.Value
from table t cross apply
     ( values ('PubId', PubId), ('PubName', PubName), ('Model1', Model1), ('Model2', Model2) 
     ) tt(Display, Value)
order by t.TicketId;