2016-04-10 9 views
0

enter image description hereentsprechende Abfrage

ich einen Tisch habe, wie gezeigt above.I versuchte Zeilen auszuwählen, wie unten dargestellt, aber nicht so in der Lage zu tun.

LP_DATE  LP_VCHNO  LP_LEDGID LP_DRAMT  LP_CRAMT 
----------------------------------------------------------------- 
01.04.2016 Ctra#001  1    400.00000  0.00000 
          3    0.00000  2000.00000 
          7    0.00000  2000.00000 
01.04.2016 Pymnt#000001 5    300.00000   0.00000 
          1    0.00000  300.00000 

Ich denke, ein Self-Join-Abfrage verwendet werden muss, aber ich bin nicht in der Lage zu Abbildung out.Please beraten, wie das gewünschte Ergebnis achieved.Thanks im voraus sein könnte.

+1

Ich bezweifle, wenn Sie dies in einer einzigen Abfrage erreichen können. Dies liegt daran, dass Sie den ersten Datensatz jeder Gruppe für die ersten beiden Spalten anzeigen und den Rest als null setzen möchten. Dies scheint ein Formatierungsproblem zu sein. Sie können einen Cursor verwenden und dies programmgesteuert erreichen – Zack

+0

Wenn Sie Firebird 3.0 verwenden, könnten Sie etwas wie das mit Fensterfunktionen –

Antwort

0

Ihre Ergebnistabelle ist seltsam, weil sie in den ersten beiden Spalten leere Werte enthält. Anders als das Problem, so scheint es, einfach ein order by und select zu sein:

select LP_DATE, LP_VCHNO, LP_LEDGID, LP_DRAMT, LP_CRAMT 
from t 
order by LP_DATE, LP_VCHNO, LP_ID; 
+0

@Zack und Gordon Dank für Ihre Antwort erreichen.Zur Zeit verwende ich Abfrage ähnlich wie von Gordon.As erwähnt Nach Zacks Vorschlag würde ich versuchen, einen Cursor mit meinem gewünschten Ergebnis zu verwenden und zu sehen, was passiert ... – msm

0
SELECT 
    CASE WHEN I_MIN.LP_DATE IS NULL THEN NULL ELSE I.LP_DATE END AS LP_DATE 
    , CASE WHEN I_MIN.LP_DATE IS NULL THEN NULL ELSE I.LP_VCHNO END AS LP_VCHNO 
    , I.LP_LEDGID 
    , I.LP_DRAMT 
    , I.LP_CRAMT 
FROM 
    YOUR_TABLE I 
    LEFT JOIN 
    (SELECT 
     I.LP_DATE 
     , MIN(I.LP_LEDGID) AS MIN_LP_LEDGID 
    FROM 
     YOUR_TABLE I 
    GROUP BY 
     I.LP_DATE) AS I_MIN ON I.LP_DATE = I_MIN.LP_DATE AND I.LP_LEDGID = I_MIN.MIN_LP_LEDGID 
ORDER BY 
    I.LP_DATE 
    , I.LP_LEDGID 
Verwandte Themen