求sql语句一条

blftest1 2013-01-14 08:35:40
表A
rowidA nameA
1 苹果
2 香蕉
3 肉丸
4 贡丸



表B
rowidB nameB rowidA
1 水果 1,2
2 食品 3,4

要求查询结果
rowidB nameB nameA
1 水果 苹果
1 水果 香蕉
2 食品 肉丸
2 食品 贡丸
...全文
252 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
daishaodong 2013-01-15
  • 打赏
  • 举报
回复
select中可以用case语句来实现啊啊。。
發糞塗牆 2013-01-15
  • 打赏
  • 举报
回复
引用 3 楼 blftest1 的回复:
引用 2 楼 DBA_Huangzj 的回复: SQL code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758-----------------------------------------------------------……
那就是你的数据有问题咯,比如有null值或者空值,我是根据你给出的数据执行的。检查一下你那里是否有这两类值,并且数据量会不会很大,这个查询一般到2000多行就不能这样用了
blftest1 2013-01-15
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
SQL code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758------------------------------------------------------------------ Auth……
运行之后出现参数数据类型 int 对于 substring 函数的参数 1 无效
blftest1 2013-01-15
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
我也给你说乱了
好了
發糞塗牆 2013-01-15
  • 打赏
  • 举报
回复
我也给你说乱了
發糞塗牆 2013-01-15
  • 打赏
  • 举报
回复
你有数据,你自己试试吧。
blftest1 2013-01-15
  • 打赏
  • 举报
回复
引用 7 楼 DBA_Huangzj 的回复:
SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556---------------------------------------------------------------- -- Author ……
不好意思啊 我那个rowidA有的点乱 不知道是表A中的还是表B中的了 如果是表B中的 那么把sql语句里面的rowidA改成rowidAB可以吗
發糞塗牆 2013-01-15
  • 打赏
  • 举报
回复
---------------------------------------------------------------- 
-- Author  :DBA_Huangzj(發糞塗牆) 
-- Date    :2013-01-14 20:46:05 
-- Version: 
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)  
--    Jun 17 2011 00:57:23  
--    Copyright (c) Microsoft Corporation 
--    Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1) 
-- 
---------------------------------------------------------------- 
--> 测试数据:[A] 
if object_id('[A]') is not null drop table [A] 
go  
create table [A]([rowidA] int,[nameA] varchar(4)) 
insert [A] 
select 1,'苹果' union all
select 2,'香蕉' union all
select 3,'肉丸' union all
select 4,'贡丸'
--------------开始查询-------------------------- 
--> 测试数据:[B] 
if object_id('[B]') is not null drop table [B] 
go  
create table [B]([rowidB] int,[nameB] varchar(4),[rowidA] varchar(3)) 
insert [B] 
select 1,'水果','1,2' union all
select 2,'食品','3,4'
--------------开始查询-------------------------- 
  
SELECT  b.[rowidB] , 
        b.nameB , 
        a.nameA 
FROM    [A] a 
        INNER JOIN ( SELECT [rowidB] , 
                            [nameB] , 
                            SUBSTRING([rowidA], number, 
                                      CHARINDEX(',', [rowidA] + ',', number) 
                                      - number) AS [rowidA] 
                     FROM   (SELECT * FROM [B] WHERE rowidB=1) a , 
                            master..spt_values 
                     WHERE  number >= 1 
                            AND number <= LEN([rowidA]) 
                            AND type = 'p'
                            AND SUBSTRING(',' + [rowidA], number, 1) = ','
                   ) b ON a.rowidA = b.rowidA 
----------------结果---------------------------- 
  
/*  
rowidB      nameB nameA
----------- ----- -----
1           水果    苹果
1           水果    香蕉

(2 行受影响)
  
*/
blftest1 2013-01-15
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
引用 3 楼 blftest1 的回复:引用 2 楼 DBA_Huangzj 的回复: SQL code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758--------------------------……
那我指定查询表B中的rowidB为1的 这样就不会出现空值了 怎么加入rowidB=1这个条件
發糞塗牆 2013-01-14
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-01-14 20:46:05
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
--	Jun 17 2011 00:57:23 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([rowidA] int,[nameA] varchar(4))
insert [A]
select 1,'苹果' union all
select 2,'香蕉' union all
select 3,'肉丸' union all
select 4,'贡丸'
--------------开始查询--------------------------
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([rowidB] int,[nameB] varchar(4),[rowidA] varchar(3))
insert [B]
select 1,'水果','1,2' union all
select 2,'食品','3,4'
--------------开始查询--------------------------

SELECT  b.[rowidB] ,
        b.nameB ,
        a.nameA
FROM    [A] a
        INNER JOIN ( SELECT [rowidB] ,
                            [nameB] ,
                            SUBSTRING([rowidA], number,
                                      CHARINDEX(',', [rowidA] + ',', number)
                                      - number) AS [rowidA]
                     FROM   [B] a ,
                            master..spt_values
                     WHERE  number >= 1
                            AND number <= LEN([rowidA])
                            AND type = 'p'
                            AND SUBSTRING(',' + [rowidA], number, 1) = ','
                   ) b ON a.rowidA = b.rowidA
----------------结果----------------------------

/* 
rowidB      nameB nameA
----------- ----- -----
1           水果    苹果
1           水果    香蕉
2           食品    肉丸
2           食品    贡丸

(4 行受影响)

*/
blftest1 2013-01-14
  • 打赏
  • 举报
回复
说明 在表B中 rowidA为多个 以逗号分开存储了

34,870

社区成员

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

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