2013-05-17 66 views
0

在查詢中如何結合此查詢

cr是客戶, chh?伊勢customer_pays, cari_kod是客戶代碼, cari_unvan1是客戶名稱 cha_tarihi是工資的日期, cha_meblag是支付量

查詢的目的,得到客戶的specisified名單和他們的薪酬和量最後一天錢...

其實我的經理需要更多的細節,但查詢是非常緩慢的,這就是爲什麼即時通訊只使用3個子查詢。

問題是如何合併它們?

我研究關於CTE和「有節」,「子查詢‘和地方’,但沒有運氣。

任何人都可以有一個提議。

操作系統是WIN2003和SQL Server版本是MSSQL 2005 。

問候


select cr.cari_kod,cr.cari_unvan1, cr.cari_temsilci_kodu, 
(select top 1 
    chh1.cha_tarihi 
    from dbo.CARI_HESAP_HAREKETLERI chh1 where chh1.cha_kod=cr.cari_kod order by chh1.cha_RECno) as sontar, 
(select top 1 
    chh2.cha_meblag 
    from dbo.CARI_HESAP_HAREKETLERI chh2 where chh2.cha_kod=cr.cari_kod order by chh2.cha_RECno) as sontutar 

from dbo.CARI_HESAPLAR cr 
where (select top 1 
    chh3.cha_tarihi 
    from dbo.CARI_HESAP_HAREKETLERI chh3 where chh3.cha_kod=cr.cari_kod order by chh3.cha_RECno) >'20130314' 
and 
cr.cari_bolge_kodu='322' 
or 
cr.cari_bolge_kodu='324' 
order by cr.cari_kod 
+0

親愛的帕拉多我怎麼能添加代碼/代碼標籤,因爲我不能這樣做。感謝您的編輯。 – ikutluay

回答

1

你會probab LY加快改變你的最後where子句查詢:

where (select top 1 chh3.cha_tarihi 
     from dbo.CARI_HESAP_HAREKETLERI chh3 where chh3.cha_kod=cr.cari_kod 
     order by chh3.cha_RECno 
    ) >'20130314' and 
     cr.cari_bolge_kodu in ('322', '324') 
order by cr.cari_kod 

假設你想在日期條件滿足,這兩個代碼之一。您的原始邏輯是(日期和代碼= 322)或(代碼= 324)。

整個查詢可以通過查找CHH表中的記錄然後使用它來改進。爲此,您需要使用窗口功能row_number()。我認爲這是你想要的查詢:

select cari_kod, cari_unvan1, cari_temsilci_kodu, 
     cha_tarihi, cha_meblag 
from (select cr.*, chh.*, 
      ROW_NUMBER() over (partition by chh.cha_kod order by chh.cha_recno) as seqnum 
     from dbo.CARI_HESAPLAR cr join 
      dbo.CARI_HESAP_HAREKETLERI chh 
      on chh.cha_kod=cr.cari_kod 
     where cr.cari_bolge_kodu in ('322', '324') 
    ) t 
where chh3.cha_tarihi > '20130314' and seqnum = 1 
order by cr.cari_kod; 

這個版本假定修改後的邏輯日期/代碼邏輯。

如果在兩個表中有兩個具有相同名稱的列,內部子查詢select可能會生成一個錯誤。如果是這樣,那麼只列出列而不是使用*

+0

親愛的戈登thax答覆。但是這個查詢爲每條記錄返回多個細節。我只需要最後一個。 – ikutluay

+0

@ikutluay。 。 。那是因爲我經歷了識別哪一個是最後一個的麻煩,但沒有將它添加到where子句中。這是用'和seqnum = 1'修復的。 –

+0

親愛的戈登,當我檢查結果表時,我發現返回的表格不包含日期最新的表格。感謝您的時間,但返回的表格值不正確 – ikutluay