2016-05-24 4 views
1

から同じデータを排除:私は私のクエリについて何かをお聞きしたいSQL Serverの列

SELECT 
    a.Parent_Barcode,a.Parent_ItemBOM, a.Child_ItemChildNo, 
    b.WorkCenter, b.OperationNo, b.OperationDesc 
FROM 
    @T_BOM a 
LEFT JOIN 
    ROUTING b ON a.Parent_ItemBOM = b.itemno 
WHERE 
    a.parent_itembom IN (SELECT itemno FROM routing) 
ORDER BY 
    b.operationno 

と結果:

|BARCODE1 |RK2/7350/7357-4.40-850/XX69/7303FFB |R7350/7357-4.40-850     | 8050|50.000000| COGPAD RCVS     
|BARCODE1 |RK2/7350/7357-4.40-850/XX69/7303FFB |FXX69/7303FFB-1245     | 8050|50.000000| COGPAD RCVS     
|BARCODE1 |P-ARRGY5704-9.3-850-RE5    |F3W/7303FFB-1250     | 8060|60.000000| BUILDING RCVS     
|BARCODE1 |P-ARRGY5704-9.3-850-RE5    |R7350/7357-1.40-850     | 8060|60.000000| BUILDING RCVS     
|BARCODE1 |P-ARRGY5704-9.3-850-RE5    |E1020        | 8060|60.000000| BUILDING RCVS     
|BARCODE1 |P-ARRGY5704-9.3-850-RE5    |RK2/7350/7357-4.40-850/XX69/7303FFB | 8060|60.000000| BUILDING RCVS     
|BARCODE1 |SL-ARRGY5704-18.2X9.3X31X842+N  |P-ARRGY5704-9.3-850-RE5    | 8070|70.000000| CURING RCVS     
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8080|80.000000| CUTTING RCVS 
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8081|81.000000| SANDING      
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8082|82.000000| POC RCVS      
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8090|90.000000| INSPECTION RCVS 

======================================================================================= 

|BARCODE2 |RK2/7350/7357-4.40-850/XX69/7303FFB |R7350/7357-4.40-850     | 8050|50.000000| COGPAD RCVS     
|BARCODE2 |RK2/7350/7357-4.40-850/XX69/7303FFB |FXX69/7303FFB-1245     | 8050|50.000000| COGPAD RCVS     
|BARCODE2 |P-ARRGY5704-9.3-850-RE5    |F3W/7303FFB-1250     | 8060|60.000000| BUILDING RCVS     
|BARCODE2 |P-ARRGY5704-9.3-850-RE5    |R7350/7357-1.40-850     | 8060|60.000000| BUILDING RCVS     
|BARCODE2 |P-ARRGY5704-9.3-850-RE5    |E1020        | 8060|60.000000| BUILDING RCVS     
|BARCODE2 |P-ARRGY5704-9.3-850-RE5    |RK2/7350/7357-4.40-850/XX69/7303FFB | 8060|60.000000| BUILDING RCVS     
|BARCODE2 |SL-ARRGY5704-18.2X9.3X31X842+N  |P-ARRGY5704-9.3-850-RE5    | 8070|70.000000| CURING RCVS     
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8080|80.000000| CUTTING RCVS 
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8081|81.000000| SANDING      
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8082|82.000000| POC RCVS      
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |SL-ARRGY5704-18.2X9.3X31X842+N  | 8090|90.000000| INSPECTION RCVS 

その結果では、私は「COGPAD RCVS」を複製し、4てきました"BUILDING RCVS"の値。どのように私はそのような同じデータを排除することができます

|BARCODE1 |RK2/7350/7357-4.40-850/XX69/7303FFB |8050|50.000000| COGPAD RCVS         
|BARCODE1 |P-ARRGY5704-9.3-850-RE5    |8060|60.000000| BUILDING RCVS        
|BARCODE1 |SL-ARRGY5704-18.2X9.3X31X842+N  |8070|70.000000| CURING RCVS     
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |8080|80.000000| CUTTING RCVS 
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |8081|81.000000| SANDING      
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |8082|82.000000| POC RCVS      
|BARCODE1 |ARRGY5704-18.2X9.3X31X842+N#   |8090|90.000000| INSPECTION RCVS 

======================================================================================= 

|BARCODE2 |RK2/7350/7357-4.40-850/XX69/7303FFB |8050|50.000000| COGPAD RCVS       
|BARCODE2 |P-ARRGY5704-9.3-850-RE5    |8060|60.000000| BUILDING RCVS        
|BARCODE2 |SL-ARRGY5704-18.2X9.3X31X842+N  |8070|70.000000| CURING RCVS     
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |8080|80.000000| CUTTING RCVS 
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |8081|81.000000| SANDING      
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |8082|82.000000| POC RCVS      
|BARCODE2 |ARRGY5704-18.2X9.3X31X842+N#   |8090|90.000000| INSPECTION RCVS 

:私はちょうどので、私はちょうど

私の期待した結果、各バーコードのための一つの「COGPAD RCVS」と「BUILDING RCVS」を持っていることを排除したいですか?

+0

結果は後でどのように見えるでしょうか?複数の行を1つの行に折りたたんでいますか?その場合、現在異なる行の値が異なる場合、どの値を選択する必要がありますか?また、クエリには5つの列がありますが、現在の「結果」は4つしか表示されません。 –

答えて

0
;WITH ExpectedResult AS 
(
    SELECT R.*, 
     ROW_NUMBER() OVER(PARTITION BY R.WorkCenter, R.OperationNo, R.OperationDesc ORDER BY R.WorkCenter) AS RowNumber 
    FROM (
     SELECT 
      a.Parent_ItemBOM, a.Child_ItemChildNo, 
      b.WorkCenter, b.OperationNo, b.OperationDesc 
     FROM 
      @T_BOM a 
     LEFT JOIN 
      ROUTING b ON a.Parent_ItemBOM = b.itemno 
     WHERE 
      a.parent_itembom IN (SELECT itemno FROM routing) 
     ORDER BY 
      b.operationno 
    ) R 
) 

SELECT Parent_ItemBOM, Child_ItemChildNo, WorkCenter, OperationNo, OperationDesc 
FROM ExpectedResult 
WHERE RowNumber = 1 

CTEは、あなたの場合に役立ちます。 WorkNow、OperationNo、およびOperationDescでRowNumberグループを設定すると、RowNumber = 1を取得すると予想される結果が提供されます

+0

大きな感謝、それは確かに働いた! もう1つのことは、結果がテーブルまたは@ tempテーブルに挿入できるかどうかです。 – Jackques

0

実際には、結果セットには5つの列があります。データを見ると、各行は5列の組み合わせで一意です。

最後の列にのみ一意性が必要です。以下の2つの質問を試すことができます。

SELECT max(a.Parent_ItemBOM) 
    ,max(a.Child_ItemChildNo) 
    ,b.WorkCenter 
    ,b.OperationNo 
    ,b.OperationDesc 
FROM @T_BOM a 
LEFT JOIN ROUTING b ON a.Parent_ItemBOM = b.itemno 
GROUP BY b.WorkCenter 
    ,b.OperationNo 
    ,b.OperationDesc 
WHERE a.parent_itembom IN (
     SELECT itemno 
     FROM routing 
     ) 
ORDER BY b.operationno 

SELECT DISTINCT b.WorkCenter 
    ,b.OperationNo 
    ,b.OperationDesc 
FROM @T_BOM a 
LEFT JOIN ROUTING b ON a.Parent_ItemBOM = b.itemno 
WHERE a.parent_itembom IN (
     SELECT itemno 
     FROM routing 
     ) 
ORDER BY b.operationno 
+0

同じアイテムに別のフィールド「バーコード」を追加するのはどうですか? maxを使用すると1バーコードだけが表示されます。 – Jackques

関連する問題