首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

!求一SQL语句!试了好久没有成功

2012-01-19 
求助!求一SQL语句!试了好久没有成功!表AF_typeF_Price1F_price2普通105金卡94银卡83表BF_booknameF_bookNu

求助!求一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

热点排行