2016-06-30 2 views
0

Ich habe eine Liste von Lieferanten mit Bestellungen aus verschiedenen Daten in tbl_supplier_orders.SQL Server: Wählen Sie Zeilen, die unterschiedliche WHERE-Bedingung basierend auf zwei Spalte

möchte ich nur Aufträge gemäß Regel wählen:

  • Wenn SUPPLIER_NAME: A, B, C order_date: 2016-02-19
  • Wenn SUPPLIER_NAME: P, Q, R order_date: 2016- 03-12
  • Wenn SUPPLIER_NAME: M, N order_date: 2016-03-15
  • Wenn SUPPLIER_NAME: W, X, Y, Z order_date: 2016-05-17
  • und Rest aller Datensätze Lieferanten ab 2016 -01-01

Die Säulen sind order_name, order_date, supplier_name, address, cost.

Mein erster Ansatz ist:

select 
    * 
from 
    tbl_supplier_order t1 
where 
    t1.order_date >= CONVERT(date, '2016-01-01') 
    and (t1.order_date < CONVERT(date, '2016-02-19') 
      AND t1.supplier_name not in ('A','B','C')) 
    and (t1.order_date < CONVERT(date, '2016-03-12') 
      AND t1.supplier_name not in ('P','Q','R')) 
    and (t1.order_date < CONVERT(date, '2016-03-15') 
      AND t1.supplier_name not in ('M','N')) 
    and (t1.order_date < CONVERT(date, '2016-05-07') 
      AND t1.supplier_name not in ('W','X','Y','Z')) 
+0

Haben Sie die Frage vergessen? –

+0

Ja, ich muss das Fragezeichen wahrscheinlich hinzufügen !!! – Aarush

Antwort

0

Können Sie genau klären, was Sie versuchen zu tun?

If supplier_name: A,B,C order_date:2016-02-19 

Sie sagen, eine Ihrer Bedingungen ist, dass Sie nur die Zeilen auswählen möchten, wo SUPPLIER_NAME A, B, C und das Bestelldatum 2016.02.19 ist, und die anderen Bedingungen folgen (es kann jeder sein der anderen Kombinationen auch)?

+0

Ich möchte alle Zeilen von A, B, C mit Datum> 2016-02-19 Union alle Zeilen von P, Q, R mit Datum> 2016-03-12 und so weiter und es gibt viele andere Lieferanten, die Ich muss alle Daten vom 2016-01-01 zeigen – Aarush

+0

Magnus 'Antwort sollte funktionieren, Sie mussten nur Ihre ANDs in ORs ändern. Wenn nicht, lass es mich wissen. – idgt

0

Nicht getestet, aber vielleicht können Sie so etwas versuchen.

select * from tbl_supplier_order t1 where 
(t1.order_date>CONVERT(date,'2016-01-01') AND t1.supplier_name not in ('A','B','C','P','Q','R','M','N','W','X','Y','Z')) 
OR (t1.order_date>CONVERT(date,'2016-02-19') AND t1.supplier_name in ('A','B','C')) 
OR (t1.order_date>CONVERT(date,'2016-03-12') AND t1.supplier_name in ('P','Q','R')) 
OR (t1.order_date>CONVERT(date,'2016-03-15') AND t1.supplier_name in ('M','N')) 
OR (t1.order_date>CONVERT(date,'2016-05-17') AND t1.supplier_name in ('W','X','Y','Z'))