求助!求一SQL语句!试了好久没有成功!
表A
F_type F_Price1 F_price2
普通 10 5
金卡 9 4
银卡 8 3
表B
F_bookname F_bookNum1 F_bookNum2
AAA 1 0
BBB 2 3
CCC 3 5
表C
F_Code F_Spec
001 螺丝
002 钉子
要求按表A中F_price1和F_price2中的值动态生成列
并把同样价格的放在与价格对应的列中,结果如下:
(备注:几个表中没有字段关联,但是表C两条记录是不变的,表C中的记录001对应表B中的F_Booknum1,F_bookNum1与表AF_Price1,记录2也是一样的)
其实表A和表C的主要就是为了动态生成列,表B是销售表,统计下哪种价格卖了多少!请大家帮忙!
螺丝|10元 螺丝|9元 螺丝|8元 钉子|5元 钉子|4元 钉子|3元
1 2 3 0 3 5
下面是建表语句:
create table A(F_type varchar(10), F_Price1 int, F_price2 int)
insert A select '普通 ', 10, 5
union all select '金卡 ', 9, 4
union all select '银卡 ', 8, 3
create table B(F_bookname varchar(10), F_bookNum1 int, F_bookNum2 int)
insert B select 'AAA ', 1, 0
union all select 'BBB ', 2, 3
union all select 'CCC ', 3, 5
create table C(F_code varchar(10), F_spec varchar(10))
insert C select '001 ', '螺丝 '
union all select '002 ', '钉子 '
[解决办法]
看得比较晕,但问题还是可以解决的,如:
create table A(F_type varchar(10), F_Price1 int, F_price2 int)
insert A select '普通 ', 10, 5
union all select '金卡 ', 9, 4
union all select '银卡 ', 8, 3
create table B(F_bookname varchar(10), F_bookNum1 int, F_bookNum2 int)
insert B select 'AAA ', 1, 0
union all select 'BBB ', 2, 3
union all select 'CCC ', 3, 5
create table C(F_code varchar(10), F_spec varchar(10))
insert C select '001 ', '螺丝 '
union all select '002 ', '钉子 '
DECLARE @Sql nvarchar(4000)
SELECT IDENTITY(int,1,1) AS [ID],F_spec,CASE F_spec WHEN '螺丝 ' THEN F_Price1 ELSE F_Price2 END AS F_Price INTO #T1 FROM C LEFT OUTER JOIN A ON 1=1
SELECT IDENTITY(int,1,1) AS [ID],F_spec,CASE F_spec WHEN '螺丝 ' THEN F_Booknum1 ELSE F_Booknum2 END AS F_Booknum INTO #T2 FROM C LEFT OUTER JOIN B ON 1=1
SET @Sql= 'SELECT '
SELECT @Sql=@Sql+CAST(B.F_Booknum AS nvarchar(20))+ ' AS ' ' '+A.F_spec+ '| '+CAST(A.F_Price AS nvarchar(20))+ '元 ' ', '
FROM #T1 AS A INNER JOIN #T2 AS B ON A.[ID]=B.[ID]
SET @Sql=LEFT(@Sql,LEN(@Sql)-1)
EXECUTE( @Sql)
DROP TABLE A,B,C,#T1,#T2