日期:2014-05-18  浏览次数:20709 次

————请问下面这个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代码
------解决方案--------------------
数据库表设计有问题
------解决方案--------------------
SQL code
select 
    姓名,
    B.名称,
    C .名称
from A
left 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類型'

------解决方案--------------------
探讨
这样的设计..

------解决方案--------------------
SQL code
--> liangCK小梁 于2008-11-07
--> 生成测试数据: @T1
DECLARE @T1 TABLE (姓名 VARCHAR(2),A代码 INT,B代码 INT)
INSERT INTO @T1
SELECT '王',1,1 UNION ALL
SELECT '李',1,2 UNION ALL
SELECT '张',2,5
--> 生成测试数据: @T2
DECLARE @T2 TABLE (类型 VARCHAR(5),代码 INT,名称 VARCHAR(4))
INSERT INTO @T2
SELECT 'A代码',1,'男' UNION ALL
SELECT 'A代码',2,'女' UNION ALL
SELECT 'B代码',1,'北京' UNION ALL
SELECT 'B代码',2,'上海' UNION ALL
SELECT '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代码
------解决方案--------------------
SQL code
inner join

------解决方案--------------------
SQL code

if object_id('a')is not null
   drop table a
if object_id('b')is not null
   drop table b
go
create 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,5
select 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) c
on b.代码=c.代码
 group by c.姓名

张    女    上海
王    男    北京
李    女    上海

------解决方案--------------------