如何查询?

wolfpzp 2003-09-29 05:27:20
我是数据表是:
CREATE TABLE Num{
Name NVARCHAR ( 100 ),
Date DATETIME,
Value int DEFAULT 0
}

记录是这样的:
a 2003-09-29 3 (星期一)
a 2003-09-28 2 (星期日)
a 2003-09-30 4 (星期二)
a 2003-10-01 6 (星期三)
a 2003-09-27 7 (星期六)
a 2003-09-26 8 (星期五)
a 2003-09-25 7 (星期四)
a 2003-09-24 3 (星期三)
a 2003-09-23 7 (星期二)
b 2003-09-28 2 (星期日)

我现在想查询出这样的结果:
NAME 星期日 星期一 星期二 星期三 星期四 星期五 星期六
a 2 3 11 9 7 8 7

就是把日期转换成星期,并分成以上格式来显示COUNT(Value)的值
如何查询?谢谢!
...全文
35 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolfpzp 2003-09-29
  • 打赏
  • 举报
回复
谢谢大家!
这个问题已经解决了
现在我还有一个问题:
http://expert.csdn.net/Expert/topic/2315/2315679.xml?temp=.7589228


pengdali 2003-09-29
  • 打赏
  • 举报
回复

CREATE TABLE #Num(name nvarchar(100),[Date] DATETIME,value int default 0)


insert #num values('a','2003-09-29',3)
insert #num values('a','2003-09-28',2)
insert #num values('a','2003-09-30',4)
insert #num values('a','2003-10-01',6)
insert #num values('a','2003-09-27',7)
insert #num values('a','2003-09-26',8)
insert #num values('a','2003-09-25',7)
insert #num values('a','2003-09-24',3)
insert #num values('a','2003-09-23',7)
insert #num values('b','2003-09-28',2)

select name,
sum(case when datepart(dw,[Date])=2 then value else 0 end) 星期一,
sum(case when datepart(dw,[Date])=3 then value else 0 end) 星期二,
sum(case when datepart(dw,[Date])=4 then value else 0 end) 星期三,
sum(case when datepart(dw,[Date])=5 then value else 0 end) 星期四,
sum(case when datepart(dw,[Date])=6 then value else 0 end) 星期五,
sum(case when datepart(dw,[Date])=7 then value else 0 end) 星期六,
sum(case when datepart(dw,[Date])=1 then value else 0 end) 星期日
from #Num group by name
go
drop table #Num



-----------------------
结果:

name 星期一 星期二 星期三 星期四 星期五 星期六 星期日
---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
a 3 11 9 7 8 7 2
b 0 0 0 0 0 0 2

(所影响的行数为 2 行)
yujohny 2003-09-29
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2240/2240247.xml?temp=3.889102E-02
yujohny 2003-09-29
  • 打赏
  • 举报
回复
CREATE TABLE tb1(ID INT,用户编号 NVARCHAR(3),日期 DATETIME,内容 NVARCHAR(200))
CREATE TABLE Newtb(用户编号 NVARCHAR(3),星期一 NVARCHAR(200),
星期二 NVARCHAR(200),星期三 NVARCHAR(200),
星期四 NVARCHAR(200),星期五 NVARCHAR(200),
星期六 NVARCHAR(200),星期日 NVARCHAR(200),)

INSERT tb1 values(1,'001','2003-9-8','bbb')
INSERT tb1 values(1,'001','2003-9-9','ccc')
INSERT tb1 values(1,'001','2003-9-10','ddd')
INSERT tb1 values(1,'001','2003-9-11','eee')
INSERT tb1 values(1,'001','2003-9-12','aaa')
INSERT tb1 values(1,'001','2003-9-15','aaaa')
INSERT tb1 values(1,'001','2003-9-16','bbbb')
INSERT tb1 values(1,'001','2003-9-18','cccc')
INSERT tb1 values(1,'001','2003-9-20','dddd')
INSERT tb1 values(1,'001','2003-9-22','ffff')
INSERT tb1 values(1,'001','2003-9-23','gggg')
INSERT tb1 values(1,'001','2003-9-25','hhhh')



declare @MinWeek INT,@MaxWeek INT

select @MinWeek =datepart(week,min(日期)) from tb1
select @MaxWeek =datepart(week,max(日期)) from tb1

WHILE @MinWeek <=@MaxWeek
BEGIN
INSERT INTO Newtb
select 用户编号,
max(case when datepart(dw,日期)=2 then 内容 else '---' end),
max(case when datepart(dw,日期)=3 then 内容 else '---' end),
max(case when datepart(dw,日期)=4 then 内容 else '---' end),
max(case when datepart(dw,日期)=5 then 内容 else '---' end),
max(case when datepart(dw,日期)=6 then 内容 else '---' end),
max(case when datepart(dw,日期)=7 then 内容 else '---' end),
max(case when datepart(dw,日期)=1 then 内容 else '---' end)
from tb1 where datepart(week,日期) = @MinWeek group by 用户编号

SET @MinWeek = @MinWeek + 1
END

SELECT * from Newtb

drop table tb1
drop table Newtb
愉快的登山者 2003-09-29
  • 打赏
  • 举报
回复
declare @s varchar(3000)
set @s = 'select Name'
select @s = @s + ',sum(case when datepart(ww, [Date]) ='''+ cast(datepart(ww, [Date]) as char(1)) + ''' then Value else 0 end) as ['
+(case datepart(ww, [Date]) when 1 then '星期日' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' end)+']'
from (select distinct datepart(ww, [Date]) from Num) A order by datepart(ww, [Date])
set @s = @s + ' from Num group by Name'
exec (@s)
hjhing 2003-09-29
  • 打赏
  • 举报
回复
select [name],sum(case [value] when 2 then 1 else 0 end) as 星期日,
sum(case [value] when 3 then 1 else 0 end) as 星期1,
sum(case [value] when 4 then 1 else 0 end) as 星期2,
sum(case [value] when 5 then 1 else 0 end) as 星期3,
sum(case [value] when 6 then 1 else 0 end) as 星期4,
sum(case [value] when 7 then 1 else 0 end) as 星期5,
sum(case [value] when 8 then 1 else 0 end) as 星期6
from num
group by [name]
westbulls 2003-09-29
  • 打赏
  • 举报
回复
还是交叉列表的问题,请参考下例自己写一个吧:
create table 你的表(姓名 varchar(100),学历 varchar(100),部门 int)
insert 你的表 values('n1','aa',11)
insert 你的表 values('n2','bb',1)
insert 你的表 values('n3','aa',45)
insert 你的表 values('n4','cc',81)
insert 你的表 values('n5','a',11)
insert 你的表 values('n6','aay',561)
insert 你的表 values('n7','a',14)

declare @sql varchar(8000)
set @sql = 'select 部门'
select @sql = @sql + ',sum(case 学历 when '''+学历+''' then 1 else 0 end) ['+学历+'的人数]'
from (select distinct 学历 from 你的表) a

select @sql =@sql+' from 你的表 group by 部门'

exec(@sql)
txlicenhe 2003-09-29
  • 打赏
  • 举报
回复
参考
http://expert.csdn.net/Expert/topic/2217/2217976.xml?temp=.5065271

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧