订单明细表中同时包含多个商品的sql

lztqy 2020-03-13 09:16:22
一个sql问题, 订单中有多个商品,想要查询订单中同时包含有商品A、商品B、商品C等的所有订单信息。非常感谢你的帮助。

订单明细表
订单号 商品
1001 A
1001 B
1001 C
1001 D
1002 A
...全文
1638 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lztqy 2020-03-13
  • 打赏
  • 举报
回复
SELECT ORDERNO FROM YOUR_TABLE WHERE GOODS IN ( 'A', 'B', 'C') GROUP BY ORDERNO HAVING COUNT(DISTINCT GOODS) = 3
二月十六 版主 2020-03-13
  • 打赏
  • 举报
回复
引用 4 楼 lztqy 的回复:
SELECT 订单号 FROM #T GROUP BY 订单号 HAVING COUNT(DISTINCT 商品) >= ( SELECT COUNT(DISTINCT value) FROM STRING_SPLIT('A,B,C', ',') ); 这个是比较商品种类数是否 大于3?
大于等于你要查询包含的商品数量 “同时包含有商品A、商品B、商品C”
lztqy 2020-03-13
  • 打赏
  • 举报
回复
SELECT 订单号 FROM #T GROUP BY 订单号 HAVING COUNT(DISTINCT 商品) >= ( SELECT COUNT(DISTINCT value) FROM STRING_SPLIT('A,B,C', ',') ); 这个是比较商品种类数是否 大于3?
二月十六 版主 2020-03-13
  • 打赏
  • 举报
回复
引用 2 楼 lztqy 的回复:
[quote=引用 1 楼 二月十六 的回复:]
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([订单号] int,[商品] nvarchar(21))
Insert #T
select 1001,N'A' union all
select 1001,N'B' union all
select 1001,N'C' union all
select 1001,N'D' union all
select 1002,N'A'
Go
--测试数据结束
SELECT 订单号
FROM #T
GROUP BY 订单号
HAVING COUNT(DISTINCT 商品) >=
(
    SELECT COUNT(DISTINCT value) FROM STRING_SPLIT('A,B,C', ',')
);
如果数据库版本低,STRING_SPLIT函数没有需要自己加一个分隔函数
如果: Insert #T select 1003,N'A1' union all select 1003,N'B2' union all select 1003,N'C2' union all select 1003,N'D3' union all select 1004,N'A 这样的表呢?[/quote] 都一样吧,这个表怎么了/
lztqy 2020-03-13
  • 打赏
  • 举报
回复
引用 1 楼 二月十六 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([订单号] int,[商品] nvarchar(21))
Insert #T
select 1001,N'A' union all
select 1001,N'B' union all
select 1001,N'C' union all
select 1001,N'D' union all
select 1002,N'A'
Go
--测试数据结束
SELECT 订单号
FROM #T
GROUP BY 订单号
HAVING COUNT(DISTINCT 商品) >=
(
    SELECT COUNT(DISTINCT value) FROM STRING_SPLIT('A,B,C', ',')
);
如果数据库版本低,STRING_SPLIT函数没有需要自己加一个分隔函数
如果: Insert #T select 1003,N'A1' union all select 1003,N'B2' union all select 1003,N'C2' union all select 1003,N'D3' union all select 1004,N'A 这样的表呢?
二月十六 版主 2020-03-13
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([订单号] int,[商品] nvarchar(21))
Insert #T
select 1001,N'A' union all
select 1001,N'B' union all
select 1001,N'C' union all
select 1001,N'D' union all
select 1002,N'A'
Go
--测试数据结束
SELECT 订单号
FROM #T
GROUP BY 订单号
HAVING COUNT(DISTINCT 商品) >=
(
    SELECT COUNT(DISTINCT value) FROM STRING_SPLIT('A,B,C', ',')
);
如果数据库版本低,STRING_SPLIT函数没有需要自己加一个分隔函数

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧