2017-04-06 1 views
1

以下の表を参照してください。SQL:列Aのすべての値に対して列Bを基にした列Cの値からの新しい列

製品名| -------- -------タグ| --Subタグ

製品1 ------ | - セキュリティレベル - | - -Full

製品1 ------ | ------- -------色| --Orange

製品1 ------ | --- -region C ---- | --City A

製品2 ------ | - セキュリティレベル - | --Limited

製品2 ------ | ----地域B ---- | - 都市F

この例では、3行の「フル」を返す新しい列が必要です。製品1と2つの行の製品2については「制限付き」です。これはSQL Server用です。これまでのところ、私は以下のではなく、それに列Aを持参してください持っている:

CASE WHEN外観を取ってくれてありがとう

SECURITYLEVEL

AS THENサブタグENDタグ=「セキュリティレベル」。

+1

あなたがになっているかわかりません。固有の製品名ごとにセキュリティレベルが必要であると仮定して正しいですか? –

答えて

0
select [Product Name], 
     case when exists(select 1 from your_table as B where [Sub-tag] = 'Full' and B.[Product Name] = A.[Product Name]) then 'Full' 
      when exists(select 1 from your_table as B where [Sub-tag] = 'Limited' and B.[Product Name] = A.[Product Name]) then 'Limited' 
     end as [SecurityLevel] 
From your_table as A 
Group by [Product Name] 
3

ウィンドウ関数max()over()条件付き集約を使用:

select * 
    , SecurityLevel = max(case when Tag='Security Level' then SubTag end) 
     over (partition by ProductName) 
from t 

rextesterデモ:http://rextester.com/BZKM65131

リターン:

+-------------+----------------+---------+---------------+ 
| ProductName |  Tag  | SubTag | SecurityLevel | 
+-------------+----------------+---------+---------------+ 
| Product 1 | Security Level | Full | Full   | 
| Product 1 | Color   | Orange | Full   | 
| Product 1 | Region C  | City A | Full   | 
| Product 2 | Security Level | Limited | Limited  | 
| Product 2 | Region B  | City F | Limited  | 
+-------------+----------------+---------+---------------+ 
+0

パーフェクト、Zim – MarkJ

+0

ありがとうございました@MarkJお手伝いします! – SqlZim

関連する問題