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

着急问阿,SQL有关问题

2012-01-23 
着急问阿,在线等啊!!!!SQL问题我现在的SQL是这样的:SELECTOperator,Flag,SUM(TotalMoney)ASTotalMoney,COU

着急问阿,在线等啊!!!!SQL问题
我现在的SQL是这样的:
SELECT   Operator,   Flag,   SUM(TotalMoney)   AS   TotalMoney,   COUNT(*)   AS   COUNTS
FROM   PawnM
WHERE   (FromDate   > =   '2003-01-1 ')   AND   (ToDate   <=   '2007-7-17 ')
GROUP   BY   Operator,   Flag  

查询结果:
Operator     Flag     TotalMoney     Counts
操作员1         0             100                 12
操作员2         1             200                 13
操作员1         1             300                 14
操作员1         2             400                 15  

我想实现的查询结果如下:
Operator   TotalMoney     Counts   TotalMoney2     Counts2     TotalMoney3     Counts3  
操作员1         0                     100                 300             14                   400                 15
操作员2         1                     200                 0                   0                   0                       0

Flag:0--9
“TotalMoney2     Counts2     TotalMoney3     Counts3   ”这些字段PawnM表中没有
请问在一个SQL语句中能实现吗?怎么写?

[解决办法]
SELECT Operator, SUM(TotalMoney) AS TotalMoney1, COUNT(*) AS COUNTS1,
' ' AS TotalMoney2, ' ' AS COUNTS2,
' ' AS TotalMoney3, ' ' AS COUNTS3

FROM PawnM
WHERE (FromDate > = '2003-01-1 ') AND (ToDate <= '2007-7-17 ') anf flag =0
GROUP BY Operator, Flag

union

SELECT Operator, ' ' as TotalMoney1, ' 'AS COUNTS1,
SUM(TotalMoney) AS TotalMoney2, COUNT(*) AS COUNTS2,
' ' AS TotalMoney3, ' ' AS COUNTS3
FROM PawnM
WHERE (FromDate > = '2003-01-1 ') AND (ToDate <= '2007-7-17 ') anf flag =1
GROUP BY Operator, Flag

union

SELECT Operator, ' ' as TotalMoney1, ' 'AS COUNTS1,// 不行的话,把 ' '改为0
' ' AS TotalMoney2, ' ' AS COUNTS2
SUM(TotalMoney) AS TotalMoney3, COUNT(*) AS COUNTS3,
FROM PawnM
WHERE (FromDate > = '2003-01-1 ') AND (ToDate <= '2007-7-17 ') anf flag =2
GROUP BY Operator, Flag

union

...

就这样写,自己试试


[解决办法]
select Operator, SUM(TotalMoney1) AS TotalMoney1, COUNT(COUNTS1) AS COUNTS1,
SUM(TotalMoney2) AS TotalMoney2, COUNT(COUNTS2) AS COUNTS2,
SUM(TotalMoney3) AS TotalMoney3, COUNT(COUNTS23) AS COUNTS3

from
(


SELECT Operator, SUM(TotalMoney) AS TotalMoney1, COUNT(*) AS COUNTS1,


' ' AS TotalMoney2, ' ' AS COUNTS2,
' ' AS TotalMoney3, ' ' AS COUNTS3

FROM PawnM
WHERE (FromDate > = '2003-01-1 ') AND (ToDate <= '2007-7-17 ') anf flag =0
GROUP BY Operator, Flag

union

SELECT Operator, ' ' as TotalMoney1, ' 'AS COUNTS1,
SUM(TotalMoney) AS TotalMoney2, COUNT(*) AS COUNTS2,
' ' AS TotalMoney3, ' ' AS COUNTS3
FROM PawnM
WHERE (FromDate > = '2003-01-1 ') AND (ToDate <= '2007-7-17 ') anf flag =1
GROUP BY Operator, Flag

union

SELECT Operator, ' ' as TotalMoney1, ' 'AS COUNTS1,// 不行的话,把 ' '改为0
' ' AS TotalMoney2, ' ' AS COUNTS2
SUM(TotalMoney) AS TotalMoney3, COUNT(*) AS COUNTS3,
FROM PawnM
WHERE (FromDate > = '2003-01-1 ') AND (ToDate <= '2007-7-17 ') anf flag =2
GROUP BY Operator, Flag

union

...

) as table1
where
...

看这个
[解决办法]
http://community.csdn.net/Expert/topic/5400/5400771.xml?temp=.5636865
[解决办法]
我想实现的查询结果如下:
Operator TotalMoney Counts TotalMoney2 Counts2 TotalMoney3 Counts3
操作员1 0 100 300 14 400 15
操作员2 1 200 0 0 0 0

Flag:0--9


---------
樓主的結果有些問題

Flag:0--9,那麼結果應該有2 * 10 + 1 = 21列。

但是樓主的結果中的第二列怎麼是0,1?
[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(Operator varchar(10),Flag varchar(1),TotalMoney int,Counts int)
insert into tb(Operator,Flag,TotalMoney,Counts) values( '操作员1 ', '0 ', 100, 12)
insert into tb(Operator,Flag,TotalMoney,Counts) values( '操作员2 ', '1 ', 200, 13)
insert into tb(Operator,Flag,TotalMoney,Counts) values( '操作员1 ', '1 ', 300, 14)
insert into tb(Operator,Flag,TotalMoney,Counts) values( '操作员1 ', '2 ', 400, 15 )
go

declare @sql varchar(8000)
set @sql = 'select Operator '
select @sql = @sql + ' , max(case flag when ' ' ' + flag + ' ' ' then totalmoney else 0 end) [ ' + 'totalmoney '+flag + '] '
+ ' , max(case flag when ' ' ' + flag + ' ' ' then counts else 0 end) [ ' + 'counts '+flag + '] '
from (select distinct flag from tb) as a
set @sql = @sql + ' from tb group by Operator '
exec(@sql)

drop table tb
/*
Operator totalmoney0 counts0 totalmoney1 counts1 totalmoney2 counts2
---------- ----------- ----------- ----------- ----------- ----------- -----------
操作员1 100 12 300 14 400 15
操作员2 0 0 200 13 0 0

*/

热点排行
Bad Request.