三表联合查询(横表转竖表,优先查询),该如何解决
三表联合查询(横表转竖表,优先查询)
我就实现了 两表查询 三表的优先查询不知道该如何实现
------解决思路----------------------
貌似直接连接一下就可以了
------解决思路----------------------
------解决思路----------------------
什么意思?是报错吗?不可能吧,我测试是直接出结果的嗫(我的SQLSERVER版本是2014)。。。直接拷贝出来执行:
表Nop_Customer
CustomerID
1
2
3
4
表Nop_Address
CustomerID FirstName LastName
1 小 白
2 小 黑
表Nop_CustomerAttribute
CustomerID keys value
3 FirstName 小
3 LastName 明
最后想得到的结果是
CustomerID FirstName LastName
1 小 白
2 小 黑
3 小 明
4 null null
查询的方式是优先级联Nop_CustomerAttribute表 如果 1、2为空则再级联Nop_Address表 如果2个都没有 则为null 或 ' '
我就实现了 两表查询 三表的优先查询不知道该如何实现
------解决思路----------------------
貌似直接连接一下就可以了
SELECT
T1.CustomerID
,ISNULL(T2.value,T4.FirstName)[FirstName]
,ISNULL(T3.value,T4.LastName)[LastName]
FROM Nop_Customer T1
LEFT JOIN Nop_CustomerAttribute T2 ON T1.CustomerID=T2.CustomerID AND T2.keys='FirstName'
LEFT JOIN Nop_CustomerAttribute T3 ON T1.CustomerID=T3.CustomerID AND T3.keys='LastName'
LEFT JOIN Nop_Address T4 ON T1.CustomerID=T4.CustomerID
------解决思路----------------------
create table Nop_Customer(
customerId int
)
create table Nop_Address(
CustomerId int,
FirstName varchar(20),
LastName varchar(20)
)
create table Nop_CustomerAttribute(
customerId int,
keys varchar(20),
value varchar(20)
)
insert into Nop_Customer
select 1 union all
select 2 union all
select 3 union all
select 4
insert into Nop_Address
select 1,'小','白' union all
select 2,'小','黑'
insert into Nop_CustomerAttribute
select 3,'FirstName','小' union all
select 3,'LastName','明'
select a.CusTomerId,b.FirstName,b.LastName
from Nop_Customer a
left outer join
(
select * from Nop_Address union all
select Customerid,
max(case when keys='FirstName' then value else '' end) as FirstName,
max(case when keys='LastName' then value else '' end) as LastName
from
Nop_CustomerAttribute group by CusTomerId
) b
on a.CusTomerId=b.CusTomerId
------解决思路----------------------
什么意思?是报错吗?不可能吧,我测试是直接出结果的嗫(我的SQLSERVER版本是2014)。。。直接拷贝出来执行: