————请问下面这个SQL语句怎么写,谢谢先!!!
A表:姓名,A代码,B代码
王 1 1
李 1 2
张 2 5
B表:类型,代码,名称
A代码 1 男
A代码 2 女
B代码 1 北京
B代码 2 上海
B代码 5 广州
。。。。。。。。
请问我现在想得到这样的结果
王 男 北京
李 男 上海
张 女 广州
。。。。。。。。
请问这个SQL语句怎么写??????????谢谢先!!!
[解决办法]
这样的设计..
[解决办法]
select 姓名,b1.名称,b2.名称
from A
inner join B b1 on A.A代码=b1.代码 and b1.类型=A代码
inner join B b2 on A.B代码=b2.代码 and b2.类型=B代码
[解决办法]
数据库表设计有问题
[解决办法]
select 姓名, B.名称, C .名称from Aleft join B on B.代码 = A.A代码 and B.类型 ='A代码'left join B C on C.代码 = A.B代码 and C.类型 ='B代码'
[解决办法]
SELECT A.姓名,B.名稱,C.名稱
FROM A表 A LEFT JOIN B表 B ON A.A代碼=B.代碼 AND B.類型='A類型'
LEFT JOIN B表 C ON A.A代碼=c.代碼 AND C.類型='B類型'
[解决办法]
--> liangCK小梁 于2008-11-07--> 生成测试数据: @T1DECLARE @T1 TABLE (姓名 VARCHAR(2),A代码 INT,B代码 INT)INSERT INTO @T1SELECT '王',1,1 UNION ALLSELECT '李',1,2 UNION ALLSELECT '张',2,5--> 生成测试数据: @T2DECLARE @T2 TABLE (类型 VARCHAR(5),代码 INT,名称 VARCHAR(4))INSERT INTO @T2SELECT 'A代码',1,'男' UNION ALLSELECT 'A代码',2,'女' UNION ALLSELECT 'B代码',1,'北京' UNION ALLSELECT 'B代码',2,'上海' UNION ALLSELECT 'B代码',5,'广州'--SQL查询如下:SELECT a.姓名,b.名称 AS 性别,c.名称 AS 地点FROM @T1 AS a JOIN @T2 AS b ON a.A代码=b.代码 AND b.类型='A代码' JOIN @T2 AS c ON a.B代码=c.代码 AND c.类型='B代码'/*姓名 性别 地点---- ---- ----王 男 北京李 男 上海张 女 广州(3 行受影响)*/
[解决办法]
这设计确实糟糕。
如果死不悔改的话, case 应该可以解决问题:
select DISTINCT A.name, (case when B.type = 'A' and A.sex = B.code then B.description) as sex,
(case when B.type = 'B' then ...
from A, B
[解决办法]
select 姓名,b1.名称,b2.名称
from A
inner join B b1 on A.A代码=b1.代码 and b1.类型=A代码
inner join B b2 on A.B代码=b2.代码 and b2.类型=B代码
[解决办法]
inner join
[解决办法]
if object_id('a')is not null drop table aif object_id('b')is not null drop table bgocreate table b (类型 varchar(8),代码 int,名称 varchar(4)) insert into b select 'A代码',1,'男' union all select 'A代码',2,'女' union all select 'B代码',1,'北京' union all select 'B代码',2,'上海' union all select 'B代码',5,'广州'create table a (姓名 varchar(2),A代码 int,B代码 int)insert into a select '王',1,1 union all select '李',1,2 union all select '张',2,5select c.姓名,性别=max(case when b.类型='A代码' then 名称 else '' end), 地址=max(case when b.类型='B代码' then 名称 else '' end) from b join (select 姓名,类型,代码 from a unpivot(代码 for 类型 in (A代码,B代码)) t1) con b.代码=c.代码 group by c.姓名张 女 上海王 男 北京李 女 上海
------解决方案--------------------
过。
[解决办法]
select 姓名,b1.名称,b2.名称
from A
inner join B b1 on A.A代码=b1.代码 and b1.类型=A代码
inner join B b2 on A.B代码=b2.代码 and b2.类型=B代码
[解决办法]
if object_id('A') is not null drop table Agocreate table A(姓名 varchar(10),A代码 int,B代码 int)goinsert into Aselect '王',1,1 union allselect '李',1,2 union allselect '张',2,5goif object_id('B') is not null drop table Bgocreate table B(类型 varchar(10),代码 int,名称 varchar(10))goinsert into Bselect 'A代码',1,'男' union allselect 'A代码',2,'女' union allselect 'B代码',1,'北京' union allselect 'B代码',2,'上海' union allselect 'B代码',5,'广州'goselect a.姓名,a名称=(select 名称 from b where 代码=A代码 and 类型='A代码'),b名称=(select 名称 from b where 代码=B代码 and 类型='B代码') from a