2012-02-29 61 views
1

我有如下兩個表:子查詢是具有多於一個的記錄

tbl_test

OFID bigint 
Offer_Text text 

OFID Offer_Text 
------- ----------  
1014 Test1 
1015 Test2 

tbl_trans

OfferNo nvarchar   

OfferNo  
---------  
1015  
1015 
1015 
1014 

現在,我想的O/P爲低於

OFID Offer_Text Counter  
------- ------------- ------- 
1014 Test1  1 
1015 Test2  3 

這意味着每個OFID的計數與Offer_Text也..

是否有可能..?

這將是什麼正確的查詢?

我現有的查詢是這樣的:

SELECT 
    offer_Text, OFID, COUNT(OFID) as Counter 
FROM 
    tbl_Test as a, tbl_trans as b 
WHERE 
    cast(a.OFID as nvarchar) = b.OfferNo 
GROUP BY 
    a.OFID 

但給我下面的錯誤:

Column 'tbl_Offer.Offer_Text' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+2

兩個旁註:**爲什麼**是'OFID'是'BIGINT',但另一個表中的'OfferNo'是'NVARCHAR'?這是同樣的事情 - 沒有?也應該是相同的數據類型!同樣:不再使用'TEXT' - 它已被棄用。改爲使用'VARCHAR(MAX)'或'NVARCHAR(MAX)'。 – 2012-02-29 06:36:35

回答

3

肯定的:

SELECT 
    OFID, Offer_Text, 
    Counter = (SELECT COUNT(*) 
       FROM dbo.tbl_trans t 
       WHERE t.OfferNo = CAST(OFID AS NVARCHAR(30))) 
FROM 
    dbo.tbl_test 

給你你想要的輸出:

OFID OfferText Counter 
1014 Test1  1 
1015 Test2  3 

更新:(!一個新的要求 - 在原來的問題不存在)有隻有那些存在於tbl_trans子錶行,你需要的東西是這樣的:

SELECT 
    OFID, Offer_Text, 
    Counter = (SELECT COUNT(*) 
       FROM dbo.tbl_trans t 
       WHERE t.OfferNo = CAST(OFID AS NVARCHAR(30))) 
FROM 
    dbo.tbl_test 
WHERE 
    EXISTS (SELECT * FROM dbo.tbl_trans WHERE t.OfferNo = OFID) 
+0

是的..你幾乎在那裏......但是這給了我tbl_test所有記錄與0計數器不匹配。 但我只想要那些與tbl_trans表中的OfferNo相匹配的記錄。 – 2012-02-29 07:02:03

+0

@VishalSuthar:這是一個**新要求**,這在您的原始問題中沒有!我已經用一種解決方案更新了我的答案。 – 2012-02-29 12:18:21

+1

非常棒..你真棒.. – 2012-03-01 12:23:23

1
SELECT 
    OFID, Offer_Text, 
    (SELECT COUNT(*) FROM tbl_trans t2 
    WHERE CAST(t1.OFID as nvarchar) = t2.OfferNo) AS Counter 
FROM 
    tbl_test t1 
0

這將也reeturn結果那裏是測試不匹配agains任何在跨表OFID:

select te.*, count(tr.offerno) as counter from tbl_test te 
left join tbl_trans tr 
on te.ofid = tr.offerno 
group by te.ofid, te.offer_text 

例如,如果你有一個1016在測試表,這將返回:

OFID Offer_Text Counter  
-------------------------- 
1014 Test1  1 
1015 Test2  3 
1016 Test3  0 

如果1016不應該存在來自查詢:)刪除單詞left

注:測試的加盟,無論它應該工作數據類型的區別

+1

那麼只有在表列中的所有值轉換都沒有錯誤的情況下,連接纔會起作用。否則,該聲明將錯誤。 – 2012-02-29 06:47:47

+0

好點。我從樣本數據中假定它就是這樣 – 2012-02-29 06:51:07

相關問題