求教:类似EXCEL分列的查询思路

风寒晓 2012-03-15 03:09:29
表A1: 品号 品名 规格 库存数量
组合物料 主板+CPU A1,A2 100

表A2: 单别 单号 元件品号
IT001 201203001 A1
IT001 201203001 A2


--目前查询方式
SELECT 单别,单号,元件品号
FROM A2
WHERE
( 元件品号 IN
(
select RIGHT(规格,2)
FROM A1
WHERE 库存数量>0
)
OR
元件品号 IN
(
select LEFT(规格,2)
FROM A1
WHERE 库存数量>0
)
)

Result:
------------------

单别 单号 元件品号
IT001 201203001 A1
IT001 201203001 A2


提问1:除了LEFT RIGHT SUBSTRING等函数,SQL 是否还提供类似EXCEL按符号分列的函数?如果有的话,WHERE里就只用一个IN就可以了;
提问2:如何查询出如下结果:
单别 单号 元件品号 组合规格 品号
IT001 201203001 A1 A1,A2 组合物料
IT001 201203001 A2 A1,A2 组合物料
------------------
感谢!
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2012-03-15
  • 打赏
  • 举报
回复
--> 测试数据:#ta
if object_id('tempdb.dbo.#ta') is not null drop table #ta
go
create table #ta([品号] varchar(8),[品名] varchar(8),[规格] varchar(5),[库存数量] int)
insert #ta
select '组合物料','主板+CPU','A1,A2',100
--> 测试数据:#tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb([单别] varchar(5),[单号] int,[元件品号] varchar(2))
insert #tb
select 'IT001',201203001,'A1' union all
select 'IT001',201203001,'A2'
--------------开始查询--------------------------

select * from #ta a,#tb b where ','+[规格]+',' like '%,'+[元件品号]+',%'
--or
select * from #ta a,#tb b where charindex(','+[元件品号]+',',','+[规格]+',')>0
/*

品号 品名 规格 库存数量 单别 单号 元件品号
-------- -------- ----- ----------- ----- ----------- ----
组合物料 主板+CPU A1,A2 100 IT001 201203001 A1
组合物料 主板+CPU A1,A2 100 IT001 201203001 A2

(2 行受影响)

*/
黄_瓜 2012-03-15
  • 打赏
  • 举报
回复

select * from #ta a,#tb b where ','+[规格]+',' like '%,'+[元件品号]+',%'
--or

select * from #ta a,#tb b where charindex(','+[元件品号]+',',','+[规格]+',')>0
  • 打赏
  • 举报
回复
没听说过,有个函数可以分组

34,591

社区成员

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

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