2016-04-10 27 views
0

enter image description here適當加入查詢

我有一個表,如圖above.I我試圖選擇行,如下圖所示,但未能如願。

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 

我想自連接查詢必須使用,但我無法算出它out.Please建議理想的結果如何能夠提前achieved.Thanks。

+1

我懷疑,如果你可以在一個單一的查詢實現這一目標。這是因爲您想要顯示前兩列的每個組的第一條記錄,並將其餘保留爲空。這似乎是一個格式問題。你可以使用遊標並以編程方式實現這個功能 – Zack

+0

如果你使用的是Firebird 3.0,你可以使用窗口函數來實現類似的功能 –

回答

0

你的結果表很奇怪,因爲它的前兩列有空白值。比其他的問題,這似乎僅僅是一個order byselect

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

@Zack和Gordon感謝你的回覆。目前我使用的查詢與Gordon提到的類似。每Zack的建議,我會嘗試使用光標我想要的結果,看看會發生什麼... – 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