2016-08-18 7 views
1

私はAnimalテーブルの下記の表の構造を有する:アップデート - SQL Server 2008の

AnimalId | AnimalName | SelectAnimal 
1  | Cat  | NULL 
2  | Dog  | NULL 
3  | Sheep  | NULL 
4  | Cow  | NULL 

AnimalFeatureがテーブル:

Animal Id | Feature | Present 
1   | Teeth | Y  
1   | Milk | Y 
1   | Tail | Y 
2   | Teeth | Y 
3   | MILK | Y 
4   | Teeth | Y 
4   | MILK | N 
4   | Tail | Y 

と私はコンマを生成していますが次のクエリを使用して現在の列の区切りリスト

SELECT DISTINCT 
    A1.AnimalId, 
    STUFF((SELECT ', ' + ltrim(rtrim(A2.Present)) 
      FROM Animal AS A2 
      WHERE A1.AnimalId = A2.AnimalId 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') As ConcatValue 
FROM  
    Animal as A1 
GROUP BY 
    AnimalId; 

reqすべての機能が存在する場合にのみ、動物マスターテーブルを更新することです。

最初の2つの機能がyesの場合、selectanimal列はyesを返します.がない場合は、これらのレコードを無視する必要があります。

最終的な出力は、あなたが任意のポインタを与えるか、これを実現する方法に助けてもらえ

1 CAT Y 
2 DOG NULL 
3 SHEEP NULL 
4 COW N  

ようにすべきですか?次のような

+0

'行う一切重複を返さないBY'あなた' GROUP以来DISTINCT'を選択する必要が必要なものを行う必要があります! (やや類似した機能、集合関数が主な違いです) – jarlh

答えて

1

何かがあなたが

WITH AF AS (
SELECT AnimalId, 
     CASE WHEN COUNT(DISTINCT CASE 
           WHEN Present = 'Y' AND Feature IN ('Teeth', 'Milk' 
           THEN Feature 
           END) >= 2 
      THEN 'Y' 
      ELSE 'N' 
      END AS SelectAnimal   
FROM AnimalFeature 
WHERE Feature IN ('Teeth', 'Milk', 'Tail') 
GROUP BY AnimalId 
HAVING COUNT(DISTINCT Feature) = 3 
) 
UPDATE A 
SET A.SelectAnimal = AF.SelectAnimal 
FROM Animal A JOIN AF ON A.AnimalId = AF.AnimalId 
+0

ありがとうございます。 –