1

SQLServer2008に次のようなテーブルがあります。

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'

WHERE1つの特定のFieldName値を選択する関数を使用して最初の2つの列を取得できますが、同じビューで他の列を取得できません。もう1つの問題は、出力ヘッダーがソーステーブルと同じではないことです。ここではSQLエイリアスを使用する必要があることを理解していますが、この場合に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

@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 に答える