【优化】求助!!!查询数据问题,最好不要用游标

小虾米zheng 2013-03-20 03:31:30
一张表职位表
字段: 职位,人员
数据用例: 管理员 李四
操作员 张三,王五,赵大
可以多个人名 存在一个字段里 用逗号隔开。
现在 问题是 我要查询出来的时候 显示成

管理员 李四
操作员 张三
操作员 王五
操作员 赵大


该怎么查询呢?求各位大大 帮忙……
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小虾米zheng 2013-03-20
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
SQL code ? 123456789101112131415161718192021222324252627282930313233343536 ---------------------------------------------------------------- -- Author :DBA_Huangzj(發糞塗牆) -- Date :2013-03……
版主 慢了 哈哈 不过 都很牛啊……
小虾米zheng 2013-03-20
  • 打赏
  • 举报
回复
引用 2 楼 guguda2008 的回复:
SQL code ? 1234567891011121314151617181920212223242526272829303132333435363738 IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb GO CREATE TABLE tb (id VARCHAR(10),col VARCHAR(30)) ……
高手啊……
guguda2008 2013-03-20
  • 打赏
  • 举报
回复
SQL SERVER对于字符串的聚合拆分支持还真不是一般两般的弱
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
慢了一步
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-03-20 15:37:11
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--	Jun 17 2011 00:54:03 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([职位] varchar(6),[人员] varchar(14))
insert [huang]
select '管理员','李四' union all
select '操作员','张三,王五,赵大'
--------------开始查询--------------------------

SELECT 
        a.[职位] ,
        SUBSTRING([人员], number, CHARINDEX(',', [人员] + ',', number) - number) AS [人员]
FROM    [huang] a ,
        master..spt_values
WHERE   number >= 1
        AND number < LEN([人员])
        AND type = 'p'
        AND SUBSTRING(',' + [人员], number, 1) = ','
----------------结果----------------------------
/* 
------ --------------
管理员    李四
操作员    张三
操作员    王五
操作员    赵大
*/
guguda2008 2013-03-20
  • 打赏
  • 举报
回复
IF OBJECT_ID('tb') IS NOT NULL 

    DROP TABLE tb

GO

CREATE TABLE tb (id VARCHAR(10),col VARCHAR(30)) 

INSERT  INTO tb VALUES  ('管理员','李四') 

INSERT  INTO tb VALUES  ('操作员','张三,王五,赵大') 

go 

 

 

SELECT T1.ID

,SUBSTRING(T1.COL,T2.NUMBER,CHARINDEX(',',T1.COL+',',NUMBER)-T2.NUMBER)

FROM TB T1

INNER JOIN MASTER..SPT_VALUES T2 

ON T2.TYPE='P' AND CHARINDEX(',',','+T1.COL,T2.NUMBER)=T2.NUMBER

 

--结果:

/*
管理员	李四
操作员	张三
操作员	王五
操作员	赵大
*/
搬砖的码农 2013-03-20
  • 打赏
  • 举报
回复
分成两个表,分主外健

34,590

社区成员

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

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