网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [推荐] 虚心 的再请教条简单的sql语句
乾坤心法
TW高级会员
Rank: 4


UID 117344
精华 9
积分 688
帖子 383
阅读权限 50
注册 2007-4-3
状态 离线
发表于 2008-8-28 09:16 资料 短消息 加为好友
虚心 的再请教条简单的sql语句

表 TableOne (ID int, AnswerDay datetime, advId int) 7` N(["s)c)i)H4K
$Q0g.u.|5P5C4}8x%H
ID              AnswerDay                      advId 4B d0J'p4W'X
1              2007-12-30 14:38:56            22 6F7O&B*^-G3?
2              2008-1-1 14:38:56              22 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛9o9K2I/W/r/A
3              2008-1-2 14:38:56              38
"b"P;v-D'V6v8[*c5}4              2008-1-3 14:38:56              22 9g/l1U,W/{.Y9V![
5              2008-3-1 14:38:56              22
-k,B!g+d6k8\-N1C*@6              2008-3-3 14:38:56              22 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛3?0I-{(O)W3R+l2n$U1\
7              2008-5-1 14:38:56              22
9u6v's Z3c1NTechWeb-技术社区8              2008-5-2 14:38:56              38 'g!p8M!E-e$V$V-d
9              2008-7-1 14:38:56              22 tech.techweb.com.cn.C.G+S9Z.o#[)h
10              2008-7-3 14:38:56              22
,n'V(u-D5l*y5n.T9}0f11              2008-7-31 14:38:56              38 tech.techweb.com.cn3V%X#e;s6Q%R h!S/L7u
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛)k*u*D,g(A&e,b D'h1W L
-------------------------------------------------   
2v$I.B-_(P+j0?+t程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛TechWeb-技术社区:N)f:u:I!G:S5|
我现在想得到: 4w(m#}%K6w.D!{$J
%]"N8U.L L:H
TheTime                CountNum 5p'`"T"H8b.h&n"v'B9T!t
2008年1月                2
*C9| l+t5]TechWeb-技术社区2008年2月                0 '[/F0W!~5P3}+l6G1b
2008年3月                2
8y.w,A"S+_5O;p+s4I:U2008年4月                0
'T2f7}(i!b/_0@程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛2008年5月                1
6j L-q-^1g6T6|2008年6月                0 o,? ^+F"`'d
2008年7月                2
:u7^8`%z8j }#E,u2Stech.techweb.com.cn2008年8月                0 tech.techweb.com.cn'@1W5i.v/U+X#v!J#z i'x
...... 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛0m'v r%v9|-W!`;p
2008年12月                0  
0].L!{6K/j
-c!{!u3q)J.[tech.techweb.com.cn----------------------------------------------------- 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛4J2t+t*M,J1|

3p6w7c)_5I-G2\2|*f我现在如此:
X!T%_:J"N8d5h+a
:z2B4u9@&a(p2t&~&R3y:V:Ltech.techweb.com.cn
3Y8I8V#h+FTechWeb-技术社区SQL codeSELECT TOP 12 IDENTITY(INT) theID INTO # FROM sysobjects
8|&S;r)M `(l2W;I:i%{%k!O(^7S+r'[2|1A5l&X8h
SELECT TheTime,COUNT(AnswerDay) as CountNum
%Y(^+U8t!L(M$b$d    FROM
9M/`7I/`:s"R%o2hTechWeb-技术社区    (SELECT DISTINCT DATENAME(year,[AnswerDay]) +  '年' + RTRIM(theID)+ '月' as TheTime
8@)A,O5~$g%i    FROM getAdverStatistics
%k4X-B2p!c8K7H0ztech.techweb.com.cn    CROSS JOIN #        
"s M.s+\7S1}0K7_2Q6Q    ) a
'p5m'A5j3|.P)k4G6`6qtech.techweb.com.cnLEFT JOIN getAdverStatistics b:s7n0C3L2J.s2f9e)q4g
    on b.advId=22    1w }#G7_&`!O
    WHERE DATEDIFF(yy,AnswerDay,getdate())=0
;p/O7x-_9W)B-W0w8J程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛    group by TheTimeTechWeb-技术社区'~%M#^'B2P
    order by TheTime
'A7C2M,s#v4V)^)ZDROP TABLE # :[$u1X8B(]5h;i9}&]
$]3R0m4V)o1g4K#Q p*l
7G6M Y)`6A

+y b!Q+F1Y,{.]!?6W;e程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛得到的是: #C7k+J!I9_7V4F-}$U#U

0E)U)J#F8T&|/^2Mtech.techweb.com.cn--------------------------------------------- tech.techweb.com.cn#}3_/D7v3_7p9}
TheTime                CountNum TechWeb-技术社区,T0F6]-N+p
2008年12月                7 tech.techweb.com.cn.I1E([%D:j6X
2008年11月                7 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"v3u1g3q0F
2008年10月                7 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛,E%z2_5~(a,d
2008年1月                  7
0P$g2g([8t:]2008年2月                  7
0V N1d+{/h8e1m;[-A.nTechWeb-技术社区2008年3月                  7 !X.z7\*u ^7J
2008年4月                  7 L J(q$W(I(I!J5j'b9[
2008年5月                  7 6y%T#R0A!p#k0G7d3E'~0f1{&z
...... +\4f2T1G/e-y&{2{(i
2008年9月                  7   E)a*c:L3X*e&l

$C0C;f-d'k3r(p.P0x Y3k
"M6I9W2D2[/n'u)~------------------------------------------------------- tech.techweb.com.cn*y9D#K2k9J5U)G&X$Z4^9y
"y b;r5F,U*m5O*S9b0g
我在加个条件后: 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛6c*d,W6n3l3K$P
6O4G*B5^1h(e3^+S
!k-B4U(_+Q%^-n.N%I1y+x
SQL codeSELECT TOP 12 IDENTITY(INT) theID INTO # FROM sysobjects!L*R$@1s n1H
0s5G/f E4d9\'t
SELECT TheTime,COUNT(AnswerDay) as CountNumTechWeb-技术社区$y8E7Z+P'z2H
    FROM
%a0B+]"k%R-S-_#^%Gtech.techweb.com.cn    (SELECT DISTINCT DATENAME(year,[AnswerDay]) +  '年' + RTRIM(theID)+ '月' as TheTime
-O/I;^)a G/P    FROM getAdverStatistics
"x.K9A*U#r!G"h8D程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛    CROSS JOIN #        程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛)u8\+C'|'E C7e#`"]4B9N+O
    ) a
;h-F8e,Y-q$u+]7|7V:?tech.techweb.com.cnLEFT JOIN getAdverStatistics b
$f/d.b%}"Z%x/b0B ` R:D    on b.advId=22 and DATENAME(year,[AnswerDay]) +  '年' + datename(month,[AnswerDay])+ '月'=TheTime --//这加个条件   ;}.G7O0? H
    WHERE DATEDIFF(yy,AnswerDay,getdate())=0 P"Q;k4z+j!Y0p
    group by TheTimeTechWeb-技术社区6p&V!E5?.}6z8y7f6E.\
    order by TheTime
:X9f7R8k)?&t3zDROP TABLE # -b3M*B6k t.I'p'J
$w4g:u,z!s#e
TechWeb-技术社区1X9I&D e$\!q3W
tech.techweb.com.cn-]8X4E+n/h
-----------------------------------------------------
;E4C0Q a7X2r3E,X5O*a,a%T m
并没有出现我想象中的: TechWeb-技术社区6L4?%j,|#R9E6D
------------------------------------------------ (R4i)e&y&{
TheTime                CountNum ,P r5F)G5T
2008年12月                0 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"l3o4u-A:A e't.I"e.e1u(@
2008年11月                0 tech.techweb.com.cn:d:@*z+I9l7],| j
2008年10月                0 8} E)b9?%p8e/n
2008年1月                  2
4u$G&\8v*i7Vtech.techweb.com.cn2008年2月                  0
+j7T5c2\.r2q7U2008年3月                  2 ;g'?7G+r#g-^6@"K
2008年4月                  0
&P;W4i&E7}5PTechWeb-技术社区2008年5月                  1
%x k.j"h5u#P,q+w...... #[6b2u-s*m
2008年9月                  0 tech.techweb.com.cn4J!p'D+g$T/h&G1m

.e A4U%C!W:x------------------------------------------------
/Q#I-}%R.d+S'F)eTechWeb-技术社区
'B*A0u#@,a"m0M#y4Q(Ytech.techweb.com.cn而是什么都查不到了。  肯定是写的有问题,但哪错了呢??? 6J%j9I!P,C-r;U,\
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛6e6J&i4_)i4T(_ E c
还有 order by  如何TheTime 能把时间按 从2008年1月 到 2008年12月排序...
;y"I6z)|4S0w6K.j/~3W#V3r:e%}2p,A3d
tech.techweb.com.cn)a7Z ](@:x3I3^2H8q!t$w.r#j
头痛!

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
ID              AnswerDay                      advId
1              2007-12-30 14:38:56            22
2              2008-1-1 14:38:56              22
3              2008-1-2 14:38:56              38
4              2008-1-3 14:38:56              22
5              2008-3-1 14:38:56              22
6              2008-3-3 14:38:56              22
7              2008-5-1 14:38:56              22
8              2008-5-2 14:38:56              38
9              2008-7-1 14:38:56              22
10              2008-7-3 14:38:56              22
11              2008-7-31 14:38:56              38

-------------------------------------------------  

我现在想得到:

TheTime                CountNum
2008年1月                2
2008年2月                0
2008年3月                2
2008年4月                0
2008年5月                1
2008年6月                0
2008年7月                2
2008年8月                0
......
2008年12月                0  


2              2008-1-1 14:38:56              22
3              2008-1-2 14:38:56              38
4              2008-1-3 14:38:56              22
TheTime                CountNum
2008年1月                2

怎么理解

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
额... CountNum 就是 count() advId=指定的 这里是22  的数据

advId=22时 2008年1月 有 2条记录。

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
datename(month,[AnswerDay])取得的数一定是两位的,而你是一位的
应该用 rtrim(month([AnswerDay]))

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
不能实现这样的排序,因为11,12会排到1月前面

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
SQL code

declare @t table (ID int,AnswerDay datetime,advId int)
insert into @t
select 1,              '2007-12-30 14:38:56',            22  union
select 2,              '2008-1-1 14:38:56',              22 union
select 3,              '2008-1-2 14:38:56',              38 union
select 4,              '2008-1-3 14:38:56',              22 union
select 5,              '2008-3-1 14:38:56',              22 union
select 6,              '2008-3-3 14:38:56',              22 union
select 7,              '2008-5-1 14:38:56',              22 union
select 8,              '2008-5-2 14:38:56',              38 union
select 9,              '2008-7-1 14:38:56',              22 union
select 10,             '2008-7-3 14:38:56',              22 union
select 11,             '2008-7-31 14:38:56',              38

select '2008年'+cast(rn as varchar(2))+'月' as thetime,count(distinct advid) as countnum
from (select top 12 (select count(*) from sysobjects where id<=a.id) as rn from sysobjects a) b
left join (select * from @t where datepart(yy,AnswerDay)='2008') c on b.rn = datepart(mm,c.AnswerDay)
group by rn

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
SQL code------------------------------------
-- Author:Flystone
-- Version:V1.001  
-- Date:2008-08-01 10:25:02
------------------------------------

-- Test Data: ta
If object_id('ta') is not null
    Drop table ta
Go
Create table ta(ID int,AnswerDay datetime,advId int)
Go
Insert into ta
select 1,'2007-12-30 14:38:56',22 union all
select 2,'2008-1-1 14:38:56',22 union all
select 3,'2008-1-2 14:38:56',38 union all
select 4,'2008-1-3 14:38:56',22 union all
select 5,'2008-3-1 14:38:56',22 union all
select 6,'2008-3-3 14:38:56',22 union all
select 7,'2008-5-1 14:38:56',22 union all
select 8,'2008-5-2 14:38:56',38 union all
select 9,'2008-7-1 14:38:56',22 union all
select 10,'2008-7-3 14:38:56',22 union all
select 11,'2008-7-31 14:38:56',38
Go
--Start
Select b.id,count(a.advid)  as cnt
from ta a right join(select 1 as id union select 2 union select 3
union select 4 as id union select 5 union select 6
union select 7 as id union select 8 union select 9
union select 10 as id union select 11 union select 12) b
on datepart(mm,a.answerday) = b.id
and advid = 22 and datepart(yy,answerday) = 2008
group by b.id
--Result:
/*
id          cnt         
----------- -----------
1           2
2           0
3           2
4           0
5           1
6           0
7           2
8           0
9           0
10          0
11          0
12          0

*/
--End

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
SQL code------------------------------------
-- Author:Flystone
-- Version:V1.001  
-- Date:2008-08-01 10:25:02
------------------------------------

-- Test Data: ta
If object_id('ta') is not null
    Drop table ta
Go
Create table ta(ID int,AnswerDay datetime,advId int)
Go
Insert into ta
select 1,'2007-12-30 14:38:56',22 union all
select 2,'2008-1-1 14:38:56',22 union all
select 3,'2008-1-2 14:38:56',38 union all
select 4,'2008-1-3 14:38:56',22 union all
select 5,'2008-3-1 14:38:56',22 union all
select 6,'2008-3-3 14:38:56',22 union all
select 7,'2008-5-1 14:38:56',22 union all
select 8,'2008-5-2 14:38:56',38 union all
select 9,'2008-7-1 14:38:56',22 union all
select 10,'2008-7-3 14:38:56',22 union all
select 11,'2008-7-31 14:38:56',38
Go
--Start
Select cast('2008年'+ltrim(b.id)+'月' as varchar) as TheTime,count(a.advid)  as cnt
from ta a right join(select 1 as id union select 2 union select 3
union select 4 as id union select 5 union select 6
union select 7 as id union select 8 union select 9
union select 10 as id union select 11 union select 12) b
on datepart(mm,a.answerday) = b.id
and advid = 22 and datepart(yy,answerday) = 2008
group by b.id
--Result:
/*
TheTime                        cnt         
------------------------------ -----------
2008年1月                        2
2008年2月                        0
2008年3月                        2
2008年4月                        0
2008年5月                        1
2008年6月                        0
2008年7月                        2
2008年8月                        0
2008年9月                        0
2008年10月                       0
2008年11月                       0
2008年12月                       0

*/
--End

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
drop table #
SELECT TOP 12 IDENTITY(INT) theID INTO # FROM sysobjects

select c.thetime,isnull(d.cnt,0) from
(SELECT DISTINCT ltrim(str(year(TableOne.AnswerDay)))+'年'+right('0'+ltrim(str(#.theID)),2)+'月' as thetime
    FROM  TableOne,#) c left join

(select b.thetime,count(b.thetime) as cnt from(SELECT DATENAME(year,[AnswerDay]) +  '年' + DATENAME(month,[AnswerDay])+ '月' as TheTime
    FROM TableOne) b group by b.thetime) d

on c.thetime=d.thetime

(12 行受影响)
thetime            
------------------ -----------
2008年01月          2
2008年02月          0
2008年03月          1
2008年04月          2
2008年05月          0
2008年06月          1
2008年07月          1
2008年08月          1
2008年09月          0
2008年10月          0
2008年11月          0
2008年12月          0

(12 行受影响)

引用 回复 顶部
游客
未注册









发表于 2008-9-4 11:53
楼主改成这样

SQL codeSELECT TheTime,COUNT(AnswerDay) as CountNum
FROM (SELECT DISTINCT DATENAME(year,[AnswerDay])+'年'+ RTRIM(theID)+'月'as TheTime,theid
    FROM getAdverStatistics  
    CROSS JOIN #        
    ) a
LEFT JOIN getAdverStatistics  b
    on b.advId=22 and DATENAME(year,[AnswerDay])+'年' + convert(varchar,datepart(month,[AnswerDay]))+'月'=TheTime   
where left(TheTime,4)=datename(yy,getdate())
    group by TheTime,theid
    order by theid

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-11-23 08:51
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.072972 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP