【发布时间】:2013-05-10 04:21:49
【问题描述】:
我正在运行以下脚本,但连接的字段返回的值不正确。
select customer_no, card_no, count(*) as no_trans,
stuff((select ',' + CAST(trans_id as varchar(20))
from transactions a (nolock)
where a.customer_no = b.customer_no and a.card_no = b.card_no
for xml path('')),1,1,'') AS trans_ids
from transactions b (nolock)
where date>= '01 apr 2013'
and date < '30 apr 2013'
and trans_id in (select trans_id
from product_items (nolock)
where product_item in ('298029'))
group by customer_no, card_no
我期望得到的是不。 trans (count(*)) 其中包含 product_item 并将 trans_id 列表作为连接字段返回。
例如。
customer_No card_no no_trans trans_ids
1234 12345 2 1, 2
但我得到的是;
customer_No card_no no_trans trans_ids
1234 12345 2 1, 2, 3, 5, 6
谁能告诉我我做错了什么? 提前致谢。
样本数据
交易表
Customer_No Card_No Trans_ID
1234 12345 1
1234 12345 2
产品项目表
Trans_ID Product_item
1 298029
2 298029
【问题讨论】:
-
在内部查询中还要在where条件中包含Trans_Id。
-
您好,尝试添加“and a.tran_id = b.tran_id”,但错误消息“transactions.trans_id”在选择列表中无效,因为它不包含在聚合函数或 GROUP 中BY 子句。”如果我然后按 trans_id 添加到组中,我会为每个添加一行...
-
@HL8 你能提供一些示例数据吗?我希望能帮助您解决问题
-
嗨,Luv,提前感谢您的帮助。我已经更新了示例数据。
-
trans_id条件应该也在查询的for xml部分。
标签: sql-server-2008 concatenation