2016-05-17 18 views
0
i.Notes, SUM(l.Discount) AS Dcount, i.DiscDate, i.DueDate, i.UIMth, i.UISeq, poj.Job, poj.Description, i.UniqueAttchID, i.ReviewerGroup AS RevGrp, SUM(l.GrossAmt) 
        AS GrossAmt, v.PayTerms, dbo.HQPT.DiscRate, i.InvTotal, DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays, 
--Trying to use the DiscDays and Dcount here  
        if DiscDays, between '20' and '11' THEN sum(Dcount) as YelDisc 

Ich hoffe, dass mir jemand hier helfen kann. Ich bin sehr neu in T-SQL. Ich glaube, was ich brauche, hier ist eine Unterabfrage, aber ich bin nicht sicher, wie es zu formatieren korrektWählen Sie Alias ​​in derselben Select-Anweisung

Danke

Antwort

0

Sie können einen Alias ​​innerhalb derselben Abfrage verweisen, aber was Sie tun können, ist die folgende:

 select 
     i.Notes, 
     SUM(l.Discount) AS Dcount, 
     i.DiscDate, 
     i.DueDate, 
     i.UIMth, 
     i.UISeq, 
     poj.Job, 
     poj.Description, 
     i.UniqueAttchID, 
     i.ReviewerGroup AS RevGrp, 
     SUM(l.GrossAmt) AS GrossAmt, 
     v.PayTerms, 
     dbo.HQPT.DiscRate, 
     i.InvTotal, 
     DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays, 

    --Trying to use the DiscDays and Dcount here  
     case 
      when DATEDIFF(day,getdate(),i.DiscDate) between '11' and '20'     THEN sum(Dcount) 
      when DATEDIFF(day,getdate(),i.DiscDate) between '20' and '40'   THEN sum(Dcount)/2 
      else 0 -- this is the default case that doesn't match your cases, it could return NULL 
     end as YelDisc 
+0

Ich habe ein paar zusätzliche Fälle zur Klarstellung hinzugefügt –

+1

Tudor danke für Ihre Hilfe, Ihr Vorschlag funktionierte genau so, wie ich es brauchte. Die zusätzliche Fallanweisung war hilfreich. Ich habe noch eine Frage. Wie würde die Aussage aussehen, wenn ich wollte, dass "11" und "20" YelDisc und "20" und "40" GreDisc sind? Ich weiß, ich kann einfach alles innerhalb der gleichen Fallaussage kuppeln oder muss ich einen separat für die GreDisc schreiben? Danke noch einmal!! – Steve

+0

Sie müssten es in separaten Spalten in separaten Fall Statemets als solche setzen: 'case wenn DATEDIFF (Tag, getdate(), i.DiscDate) zwischen '11' und '20' DANN Summe (Dcount) sonst Null Ende als YelDisc, Fall wenn DATEDIFF (Tag, getdate(), i.DiscDate) zwischen '20' und '40' DANN sum (Dcount)/2 else null als GreDisc 'und die Spalten nach nicht-Nullen in der where-Klausel suchen. Der Grund dafür ist, dass Sie Ihr Schema (d. H. Spaltennamen und Datentypen) nicht abhängig von den abgerufenen Daten ändern sollten. –

0
  1. IF ist für Programmablauf, kein Ausdruck
  2. Sie können nicht wiederverwendet werden ein Alias ​​in einer anderen Spalte
  3. Wenn numerische Ergebnisse zu vergleichen nicht umgeben konstante Werte in Anführungszeichen

versuchen

CASE WHEN DATEDIFF(day,getdate(),i.DiscDate) between 20 and 11 
     THEN sum(Dcount) 
    ELSE 0 
END as YelDisc 

Sie konnte tun, um eine Unterabfrage den Alias ​​wieder zu verwenden, aber für eine solche relativ einfachen Ausdruck und mit der Anzahl der Spalten in der Ergebnismenge, es ist wahrscheinlich nicht wert.

+0

D Stanley Ihnen für Ihre Hilfe danken. Ihr Vorschlag funktionierte genau so, wie ich es brauchte. Prost!! – Steve

Verwandte Themen