很菜的问题,求一SQL语句。
有4个表,分别为:
TA TB TC TD
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
1 大众 1 YQ 1 TQS 1 DELL
2 万联 2 MC 2 KL
3 ST 3 DY
说明:ID1=ID2=ID3=ID4=NO,且标记为唯一
数据的填充顺序依次为:TA、TB、TC、TD
现需要一SQL语句,要求输入NO后,显示该NO所对应的所有数据,没有数据的显示空白。
如输入1(即NO=1),查询结果为:
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
1 大众 1 YQ 1 TQS 1 DELL
输入3(即NO=3),查询结果为:
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
3 ST 3 DY
请大虾们帮帮忙,不胜感谢。
[解决办法]
select max(id1) as id1,max(客户名称) as 客户名称,
max(id2) as id2,max(供应商) as 供应商,
max(id3) as id3,max(加工商) as 加工商,
max(id4) as id4,max(交付单位) as 交付单位
from (
select id1,客户名称,
case(null as int) as ID2,cast(null as varchar(40)) as 供应商,
case(null as int) as ID3,cast(null as varchar(40)) as 加工商,
case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
from TA
where id1=3
union all
select null as id1,null as 客户名称,
ID2,供应商,
case(null as int) as ID3,cast(null as varchar(40)) as 加工商,
case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
from TB
where id2=3
union all
select null as id1,null as 客户名称,
null as ID2,null as 供应商,
ID3,加工商,
case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
from TC
where id3=3
union all
select null as id1,null as 客户名称,
null as ID2,null as 供应商,
null as ID3,null as 加工商,
ID4,交付单位
from TD
where id4=3
) as t
[解决办法]
drop table TA,TB,TC,TD
go
create table TA(ID1 INT,客户名称 varchar(10))
create table TB(ID2 int,供应商 varchar(10))
create table TC(ID3 int,加工商 varchar(10))
create table TD(ID4 int,交付单位 varchar(10))
insert into TA
select 1, '大众 '
union all select 2, '万联 '
union all select 3, 'ST '
insert into TB
select 1, 'YQ '
union all select 2, 'MC '
union all select 3, 'DY '
insert into TC
select 1, 'TQS '
union all select 2, 'KL '
insert into TD
select 1, 'DELL '
select ID1,
客户名称,
ID2=(select ID2 from TB where ID2=TA.ID1),
供应商=(select 供应商 from TB where ID2=TA.ID1),
ID3=(select ID3 from TC where ID3=TA.ID1),
加工商=(select 加工商 from TC where ID3=TA.ID1),
ID4=(select ID4 from TD where ID4=TA.ID1),
交付单位=(select 交付单位 from TD where ID4=TA.ID1)
from TA
where TA.ID1=1
/*
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
----------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
1 大众 1 YQ 1 TQS 1 DELL
(所影响的行数为 1 行)
*/
[解决办法]
--借用4樓 gahade(与君共勉) 的數據
drop table TA,TB,TC,TD
go
create table TA(ID1 varchar(2),客户名称 varchar(10))
create table TB(ID2 varchar(2),供应商 varchar(10))
create table TC(ID3 varchar(2),加工商 varchar(10))
create table TD(ID4 varchar(2),交付单位 varchar(10))
insert TA select '1 ', '大众 '
union all select '2 ', '万联 '
union all select '3 ', 'ST '
insert TB select '1 ', 'YQ '
union all select '2 ', 'MC '
union all select '3 ', 'DY '
insert TC select '1 ', 'TQS '
union all select '2 ', 'KL '
insert TD select '1 ', 'DELL '
--創建函數
create function fn_qry(@id varchar(2))
returns table
as
return select * from
TA left join TB on TA.ID1 = TB.ID2
left join TC on TA.ID1 = TC.ID3
left join TD on TA.ID1 = TD.ID4
where ID1 = @id
--調用函數
select * from dbo.fn_qry( '3 ')
--結果
/*
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
---- ---------- ---- ---------- ---- ---------- ---- ----------
3 ST 3 DY NULL NULL NULL NULL
(所影响的行数为 1 行)
*/
[解决办法]
use pubs
drop table TA,TB,TC,TD
go
create table TA(ID1 INT,客户名称 varchar(10))
create table TB(ID2 int,供应商 varchar(10))
create table TC(ID3 int,加工商 varchar(10))
create table TD(ID4 int,交付单位 varchar(10))
insert into TA
select 1, '大众 '
union all select 2, '万联 '
union all select 3, 'ST '
insert into TB
select 1, 'YQ '
union all select 2, 'MC '
union all select 3, 'DY '
insert into TC
select 1, 'TQS '
union all select 2, 'KL '
insert into TD
select 1, 'DELL '
select ta.ID1 ,ta. 客户名称 , tb.ID2 , tb.供应商 , tc.ID3 ,tc.加工商 , td.ID4 ,td.交付单位
from ta,tb,tc,td
where ta.id1*=tb.id2
and ta.id1*=tc.id3
and ta.id1*=td.id4
and ta.id1=3
---------------------
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
----------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
3 ST 3 DY NULL NULL NULL NULL
(所影响的行数为 1 行)