2017-01-11 3 views
3

Ich habe zwei Abfragen, die Daten aus der gleichen Tabelle erhält. Die erste Abfrage erhält Daten mit dem Status "Bezahlt", während die zweite Abfrage die Rechnung für den aktuellen Monat erhält.Konvertieren von Zeilen in Spalten - Abfrage von derselben Tabelle

erste Abfrage (Ruft vorherige bezahlte Rechnung):

SELECT 
date as 'datePd', invAmt as 'invAmtPd', refNum as 'refNumPd' 

FROM inv 

WHERE cst = "Customer" 
AND status = "Paid" 

Ausgabe dieser ist:

| datePd | invAmtPd | refNumPd | 
    | 11-20-2016 | 1500  | 0001  | 
    | 12-20-2016 | 5500  | 0002  | 

zweite Abfrage (Ruft die letzte Rechnung für den aktuellen Monat)

SELECT 
date as dateCur, refNum as 'refNumCur', invAmt as 'invAmtCur' 

FROM inv 

WHERE cst = "Customer" AND YEAR(date) = "2017" AND MONTH(date) = "01" 

Ausgabe davon ist:

| dateCur  | refNumCur | invAmtCur | 
    | 2017-01-05 | 0003   | 2500  | 

Ich versuche, diese Ausgabe zu erreichen, in der die Spalten aus der vorherigen Abfrage und die Daten aus der aktuellen Abfrage angezeigt werden.

| datePd | invAmtPd | refNumPd | refNumCur | invAmtCur | 
    | 11-20-2016 | 1500  | 0001  | 0003   | 2500  | 
    | 12-20-2016 | 5500  | 0002  |    |    | 

Wie wäre der beste Weg für mich, diese Ausgabe zu erreichen? Ich versuchte mit UNION, aber das Ergebnis der zweiten Abfrage nur an den unteren Rand ...

Hinweis: Die vorherigen bezahlten Beträge sind vom letzten Jahr datiert, während die neueste ist für 2017, wenn es möglich wäre gut, wenn der vorherige auch ausgegeben wird.

+1

Ich würde PHP nur (oder was auch immer Sie Codierung in) anstelle von MySQL, dass die Formatierung erhalten. Es gibt einfach keine großartige Möglichkeit, dies in MySQL zu tun, und ich sehe keinen Grund, warum Sie das möchten. – CptMisery

Antwort

0

Was ist so etwas wie dieses:

SELECT past.date as 'datePd', past.invAmt as 'invAmtPd', past.refNum as 'refNumPd', 
present.date as dateCur, present.refNum as 'refNumCur', present.invAmt as 'invAmtCur' 
FROM inv as past 
LEFT JOIN inv as present ON (past.cst = present.cst) 
WHERE past.cst = "cust1" 
AND past.status = "Paid" 
AND YEAR(present.date) = "2017" AND MONTH(present.date) = "01" 

Ergebnis so kommt heraus:

datePd  invAmtPd   refNPd dateCur    refNCur invAmtCur 
2016-11-20 00:00:00 1500 0001 2017-01-05 00:00:00 2500 0003 
2016-11-20 00:00:00 5500 0002 2017-01-05 00:00:00 2500 0003 
2017-01-05 00:00:00 0003 2500 2017-01-05 00:00:00 2500 0003 
Verwandte Themen