2016-05-24 7 views
1

ich etwas über meine Frage stellen mag:beseitigt gleiche Daten von SQL Server Spalte

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 

und das Ergebnis:

|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 

In diesem Ergebnis habe ich duplizieren „COGPAD RCVS“ und vier "Building RCVS" -Werte. Ich möchte nur beseitigen, dass so ich habe nur eine „COGPAD RCVS“ und „BUILDING RCVS“ für jeden Barcode

Meine erwarteten Ergebnisse:

|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 

Wie kann ich gleiche Daten wie das zu beseitigen?

+0

Wie sollte Ihr Ergebnis danach aussehen? Werden mehrere Reihen in eine einzelne Reihe zusammengelegt? Wenn ja, welcher Wert sollte ausgewählt werden, wenn aktuell unterschiedliche Zeilen unterschiedliche Werte haben? Außerdem hat Ihre Abfrage fünf Spalten, aber Ihr aktuelles "Ergebnis" Sie zeigen uns nur vier. –

Antwort

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 wird in Ihrem Fall helfen. Legen Sie die RowNumber-Gruppe nach WorkCenter, OperationNo und OperationDesc fest, der Abruf der RowNumber = 1 wird das erwartete Ergebnis liefern

+0

Vielen Dank, es hat sicherlich funktioniert !! Eine andere Sache, ist das Ergebnis kann in Tabelle oder @temp Tabelle eingefügt werden? – Jackques

0

Tatsächlich hat Ihr Ergebnissatz 5 Spalten. Wenn Sie die Daten betrachten, ist jede einzelne Zeile für die Kombination von 5 Spalten eindeutig.

Sie erwarten Eindeutigkeit nur in der letzten Spalte. Sie können die zwei Abfragen unten versuchen.

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

Wie wäre es mit einem anderen Feld "Barcode" für den gleichen Artikel? mit max nur 1 barcode anzeigen. – Jackques