我有两张表格如下:
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
但是给我以下错误:
列'tbl_Offer.Offer_Text'在选择列表中无效,因为它 不包含在聚合函数或GROUP BY中 子句。
答案 0 :(得分: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)
答案 1 :(得分: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
答案 2 :(得分:0)
如果测试中的ofid与trans表中的任何一个不匹配,这也会重新结果:
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
这个词:)
注意:测试了联接,无论数据类型有何不同,它都应该有效