我在SQL Server 2008中有一个表格如下:
Headings: 'ClientId' 'FieldName' 'Value'
Line1: '1' 'Company Name' 'Company1'
Line2: '1' 'Contract Type' 'Year'
Line3: '1' 'Login Details' '13546'
Line4: '2' 'Company Name' 'Company2'
Line5: '2' 'Contract Type' 'Month'
Line6: '2' 'Login Details' '46528'
Line7: '3' 'Company Name' 'Company3'
Line8: '3' 'Contract Type' 'Month'
Line9: '3' 'Login Details' '54687'
我需要创建一个View,它将以下列方式显示相同的信息:
Headings: 'ClientId' 'CompanyName' 'ContractType' 'Login'
Line1: '1' 'Company1' 'Year' '13546'
Line2: '2' 'Company2' 'Month' '46528'
Line3: '3' 'Company3' 'Month' '54687'
我可以使用WHERE
函数选择一个特定的FieldName值来获取前两列,但无法在同一视图中获取其他列。另一个问题是输出标头与源表中的输出标头不同。据我所知,这里必须使用SQL别名,但我不知道如何在这种情况下应用它们。
我该怎么做?
答案 0 :(得分:2)
您可以使用pivot。
select P.ClientId,
P.[Company Name],
P.[Contract Type],
P.[Login Details]
from YourTable
pivot (min(Value)
for FieldName in ([Company Name],
[Contract Type],
[Login Details])
) P
答案 1 :(得分:0)
您可以使用@Mikael Eriksson answer之类的Pivot也可以使用以下查询:
SELECT A.ClientID,
B.VALUE AS CompanyName,
C.VALUE AS ContractType,
D.VALUE AS [Login]
FROM (SELECT DISTINCT ClientID FROM yourTable) A
LEFT JOIN YourTable AS B ON B.ClientID = A.ClientID AND B.FieldName = 'Company Name'
LEFT JOIN YourTable AS C ON B.ClientID = A.ClientID AND C.FieldName = 'Contract Type'
LEFT JOIN YourTable AS D ON B.ClientID = A.ClientID AND D.FieldName = 'Login Details'