select * (((select top1 客户名称 from 表 where 产品名称=产品名称) as 客户名称1) union ((select top2客户名称 from 表 where 产品名称=产品名称) as 客户名称2) union ...) 可能哪个地方有错,我也没试,反正就这个思路,要是对了,我不要分,惭愧!
对了,不能用top2 要把第一个客户名称筛选了用 and 客户名称!=(select top1 客户名称 from 表 where 产品名称=产品名称)
我重新写一边 select * (((select top1 客户名称 from 表 where 产品名称=产品名称) as 客户名称1) union ((select 客户名称 from 表 where 产品名称=产品名称 and 客户名称!=(select top1 客户名称 from 表 where 产品名称=产品名称)) as 客户名称2) union ...)
SELECT DISTINCT T1.客戶名稱, T1.產品名稱, T1.數量, ARER.客戶名稱, ARER.產品名稱 FROM TB AS T1 INNER JOIN FROM ( SELECT T2.客戶名稱, T2.產品名稱, T2.數量 FROM TB AS T2 ) AS ARER ON T1.產品名稱 = ARER.產品名稱
declare @t table(客户名称 varchar(10),产品名称 varchar(10),数量 int) insert into @t values('甲','金条',10) insert into @t values('乙','金条',20) insert into @t values('甲','钻石',30) insert into @t values('乙','钻石',20) insert into @t values('甲','珍珠',50) insert into @t values('乙','珍珠',30) insert into @t values('甲','摇头丸',10) insert into @t values('乙','AK47',10)select isnull(t1.客户名称,'') as 客户名称1, isnull(t2.客户名称,'') as 客户名称2, t1.产品名称 as 产品名称, isnull(t1.数量,0) as 数量1, isnull(t2.数量,0) as 数量2 from @t as t1 left join @t as t2 on t2.产品名称=t1.产品名称 and t1.客户名称 <> t2.客户名称----------------------------------------------------------------------- 客户名称1 客户名称2 产品名称 数量1 数量2 ---------- ---------- ---------- ----------- ----------- 甲 乙 金条 10 20 乙 甲 金条 20 10 甲 乙 钻石 30 20 乙 甲 钻石 20 30 甲 乙 珍珠 50 30 乙 甲 珍珠 30 50 甲 摇头丸 10 0 乙 AK47 10 0(8 個資料列受到影響)
SELECT t1.CustName, t1.ProName, t1.Number, t2.CustName AS Expr1, t2.Number AS Expr2 FROM Table1 t1 LEFT OUTER JOIN Table1 t2 ON t1.ProName = t2.ProName AND t1.CustName <> t2.CustName
这次OK了 哈~~~ declare @t table(客户名称 varchar(10),产品名称 varchar(10),数量 int) insert into @t values('甲','金条',10) insert into @t values('乙','金条',20) insert into @t values('甲','钻石',30) insert into @t values('乙','钻石',20) insert into @t values('甲','珍珠',50) insert into @t values('乙','珍珠',30) insert into @t values('甲','摇头丸',10) insert into @t values('乙','AK47',10)select isnull(t1.客户名称,'') as 客户名称1, isnull(t2.客户名称,'') as 客户名称2, t1.产品名称 as 产品名称, isnull(t1.数量,0) as 数量1, isnull(t2.数量,0) as 数量2 from @t as t1 left join @t as t2 on t2.产品名称=t1.产品名称 and t1.客户名称 <> t2.客户名称 where not exists(select 1 from @t where 产品名称 = t1.产品名称 and 客户名称 > t1.客户名称)------------------------------------------------------- 客户名称1 客户名称2 产品名称 数量1 数量2 ---------- ---------- ---------- ----------- ----------- 甲 乙 金条 10 20 甲 乙 钻石 30 20 甲 乙 珍珠 50 30 甲 摇头丸 10 0 乙 AK47 10 0(5 個資料列受到影響)
可能哪个地方有错,我也没试,反正就这个思路,要是对了,我不要分,惭愧!
select * (((select top1 客户名称 from 表 where 产品名称=产品名称) as 客户名称1) union ((select 客户名称 from 表 where 产品名称=产品名称 and 客户名称!=(select top1 客户名称 from 表 where 产品名称=产品名称)) as 客户名称2) union ...)
DISTINCT T1.客戶名稱, T1.產品名稱, T1.數量, ARER.客戶名稱, ARER.產品名稱
FROM TB AS T1
INNER JOIN
FROM
(
SELECT T2.客戶名稱, T2.產品名稱, T2.數量
FROM TB AS T2
) AS ARER ON T1.產品名稱 = ARER.產品名稱
declare @t table(客户名称 varchar(10),产品名称 varchar(10),数量 int)
insert into @t values('甲','金条',10)
insert into @t values('乙','金条',20)
insert into @t values('甲','钻石',30)
insert into @t values('乙','钻石',20)
insert into @t values('甲','珍珠',50)
insert into @t values('乙','珍珠',30)
insert into @t values('甲','摇头丸',10)
insert into @t values('乙','AK47',10)select isnull(t1.客户名称,'') as 客户名称1,
isnull(t2.客户名称,'') as 客户名称2,
t1.产品名称 as 产品名称,
isnull(t1.数量,0) as 数量1,
isnull(t2.数量,0) as 数量2
from @t as t1
left join @t as t2 on t2.产品名称=t1.产品名称 and t1.客户名称 <> t2.客户名称-----------------------------------------------------------------------
客户名称1 客户名称2 产品名称 数量1 数量2
---------- ---------- ---------- ----------- -----------
甲 乙 金条 10 20
乙 甲 金条 20 10
甲 乙 钻石 30 20
乙 甲 钻石 20 30
甲 乙 珍珠 50 30
乙 甲 珍珠 30 50
甲 摇头丸 10 0
乙 AK47 10 0(8 個資料列受到影響)
SELECT t1.CustName, t1.ProName, t1.Number, t2.CustName AS Expr1,
t2.Number AS Expr2
FROM Table1 t1 LEFT OUTER JOIN
Table1 t2 ON t1.ProName = t2.ProName AND t1.CustName <> t2.CustName
这次OK了 哈~~~
declare @t table(客户名称 varchar(10),产品名称 varchar(10),数量 int)
insert into @t values('甲','金条',10)
insert into @t values('乙','金条',20)
insert into @t values('甲','钻石',30)
insert into @t values('乙','钻石',20)
insert into @t values('甲','珍珠',50)
insert into @t values('乙','珍珠',30)
insert into @t values('甲','摇头丸',10)
insert into @t values('乙','AK47',10)select
isnull(t1.客户名称,'') as 客户名称1,
isnull(t2.客户名称,'') as 客户名称2,
t1.产品名称 as 产品名称,
isnull(t1.数量,0) as 数量1,
isnull(t2.数量,0) as 数量2
from @t as t1
left join @t as t2 on t2.产品名称=t1.产品名称 and t1.客户名称 <> t2.客户名称
where not exists(select 1 from @t where 产品名称 = t1.产品名称 and 客户名称 > t1.客户名称)-------------------------------------------------------
客户名称1 客户名称2 产品名称 数量1 数量2
---------- ---------- ---------- ----------- -----------
甲 乙 金条 10 20
甲 乙 钻石 30 20
甲 乙 珍珠 50 30
甲 摇头丸 10 0
乙 AK47 10 0(5 個資料列受到影響)