Ein Kunde kann mehrere Vereinbarungen haben, und jede Vereinbarung hat mehrere Produkte (d. H. A - H im Bild unten). Ich habe die folgende Abfrage geschrieben, die mir die Produktanzahl für jede Vereinbarung angibt. Ich verwende dann RowNum, um die Vereinbarung und das AgreementEndDate zu bestimmen, die dem heutigen Tag am nächsten sind.SQL Query Zusammenfassung Zeile
Was ich jedoch zurückgeben muss, ist RowNum = 1 ist: a) AgreementEndDate, das dem heutigen Tag am nächsten kommt (und assoziierte AgreementID und AgreementEffectiveDate) und eine Zusammenfassung des Kaufs von Produkten.
So rownum 1 =
- AgreementID = 73838545
- AgreementEffectiveDate = 2015-05-28
- AgreementEndDate = 2018-05-31
- A = 1
- B = 1
- C = 1
- D = 1
- E = 1
- F = 1
- G = 1
- H = 0
Select
LA.*
from
(select
CustomerID
,AgreementID
,min(CONVERT(char(10), AgreementEffectiveDate,126)) as 'AgreementEffectiveDate'
,min(CONVERT(char(10), AgreementEndDate,126)) as 'AgreementEndDate'
,(CASE WHEN sum(cast([A Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'A Agreement'
,(CASE WHEN sum(cast([B Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'B Agreement'
,(CASE WHEN sum(cast([C Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'C Agreement'
,(CASE WHEN sum(cast([D Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'D Agreement'
,(CASE WHEN sum(cast([E Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'E Agreement'
,(CASE WHEN sum(cast([F Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'F Agreement'
,(CASE WHEN sum(cast([G Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'G Agreement'
,(CASE WHEN sum(cast([H Agreement] as float)) >= 1 THEN 1 ELSE 0 END) as 'H Agreement'
,ROW_NUMBER() OVER(PARTITION BY TPID ORDER BY AgreementEndDate ASC) AS RowNum
from LicenseAgreement
Group by CustomerID, AgreementID, AgreementEndDate
) LA
where TPID = '1789' --and RowNum = 1
order by RowNum, CustomerID, AgreementID, AgreementEndDate
'und eine Zusammenfassung des Produktkaufs '- großartig: Was ist Ihr Produkttisch? Was hast du bisher versucht und was blockiert dich? Außerdem gibt es nicht wirklich etwas wie ein "Enddatum der Vereinbarung" - es gibt ein "Datum, an dem die Vereinbarung nicht mehr wirksam ist", das sich subtil unterscheidet (exklusive obere Grenze statt inklusive oberer Grenze) –
Es gibt niemanden Produkttabelle. Ich muss mich tatsächlich mit 8 anderen Tischen verbinden. Statt LA * habe ich versucht. LA.CustomerID , sum ([A-Abkommen}) , sum ([B-Abkommen}) , sum ([C Agreement}) , sum ([D-Abkommen }) ... und so weiter. Aber ich bekomme die gleichen Ergebnisse. Und ja, Sie haben Recht, es gibt wirklich kein Enddatum, aber die Vereinbarung ist nicht mehr in Kraft. – emie
... können wir die Beispieldaten und die Ergebnisdaten, die Sie sehen möchten, erhalten? Wenn Sie sagen, dass diese Tabelle bereits zusammenfassende Daten enthält und Sie nicht auf die anderen Tabellen zugreifen müssen, ist das in Ordnung. –