1

我在 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'

我需要创建一个视图,它将通过以下方式显示相同的信息:

Headings:  'ClientId'  'CompanyName'  'ContractType'  'Login'
Line1:     '1'         'Company1'     'Year'          '13546'
Line2:     '2'         'Company2'     'Month'         '46528'
Line3:     '3'         'Company3'     'Month'         '54687'

我可以使用选择一个特定 FieldName 值的函数获取前两列,WHERE但无法在同一视图中获取其他列。另一个问题是输出标题与源表中的不同。据我了解,这里必须使用 SQL 别名,但我不知道如何在这种情况下应用它们。

我怎样才能做到这一点?

4

2 回答 2

2

您可以使用枢轴

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小提琴

于 2012-08-13T05:52:02.380 回答
0

您可以使用 Pivot,例如@Mikael Eriksson 答案也可以使用以下查询:

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'
于 2012-08-28T07:49:31.797 回答