如何从SQL表中创建值作为视图的标题?

时间:2012-08-13 03:22:00

标签: sql-server sql sql-server-2008

我在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别名,但我不知道如何在这种情况下应用它们。

我该怎么做?

2 个答案:

答案 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

SQL Fiddle

答案 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'