读书人

求一SQL查询语句解决思路

发布时间: 2012-03-21 13:33:15 作者: rapoo

求一SQL查询语句
数据库中的表
时间 科目 成绩
2月 语文 80
2月 数学 70
2月 英语 76
2月 物理 70
1月 语文 76
1月 数学 65
1月 英语 70
1月 物理 68

查询后的表
时间 科目 上月成绩 本月成绩
2月 语文 76 80
2月 数学 65 70
2月 英语 70 76
2月 物理 68 70

怎么实现上面的查询结果


[解决办法]
select * from a
left join a b on(a.kemu=b.kemu)
where a.shijian=b.shijian-1
[解决办法]
date1 = 2月
date2 = 1月
select 时间 , 科目 , 上月成绩 ,成绩 AS 本月成绩
from
(
select * from tablename where 时间=date1
)tablenew1 left join
(
select 科目,成绩 as 上月成绩
from tablename
where 时间 = date2
) tablenew2 on tablenew1.科目=tablenew2.科目

[解决办法]
用自连接就可以了。
select a.时间,a.科目,b.成绩 as 上月成绩,a.成绩 as 本月成绩
from t a, t b
where a.时间 = b.时间
and substr(a.时间,1,1)= substr(sysdate(),5,1)
and substr(b.时间,1,1)= substr(sysdate(-1),5,1)
上月表达好像不对,不知道怎么写,可以参考一下
[解决办法]
select 时间 , 科目 , 上月成绩 ,成绩 AS 本月成绩
from
(
select * from tablename where 时间=date1
)tablenew1 left join
(
select 科目,成绩 as 上月成绩
from tablename
where 时间 = date2
) tablenew2 on tablenew1.科目=tablenew2.科目
--------------
做不到?
[解决办法]


create table test
(
Months nvarchar(12),
Subject nvarchar(12),
Result decimal(18,2),
)
insert into test values( '2月 ', '语文 ',80)
insert into test values( '2月 ', '数学 ',70)
insert into test values( '2月 ', '英语 ',76)
insert into test values( '2月 ', '物理 ',70)

insert into test values( '1月 ', '语文 ',76)
insert into test values( '1月 ', '数学 ',65)
insert into test values( '1月 ', '英语 ',70)
insert into test values( '1月 ', '物理 ',68)

declare @Pm nvarchar(12) --上月,具体你可以根据当月自己计算
declare @Cm nvarchar(12) --本月
select @Pm= '1月 '
select @Cm= '2月 '
select @Cm as '时间 ',P.Subject,P.PResult as '上月成绩 ',C.CResult as '本月成绩 ' from
(
select Months,Subject, Result as PResult from test where Months=@Pm
)P
left join
(
select Months,Subject,Result as CResult from test where Months=@Cm
)C on C.Subject=P.subject
from test

Drop table test
[解决办法]
这语句经典,不过还是写出来了,测试了上,可以:


select tablenew1.时间,tablenew1.科目,tablenew1.上月成绩,tablenew2.本月成绩 from
(
select 时间,科目,成绩 AS 上月成绩 from km where 时间=(Convert(varchar(10),month(GETDATE())-1))+ '月 '
) tablenew1 left join (
select 时间,科目,成绩 AS 本月成绩 from km where 时间=(Convert(varchar(10),month(GETDATE())))+ '月 '
)
tablenew2 on tablenew1.科目 = tablenew2.科目
[解决办法]
select 时间 , 科目 , 上月成绩 ,成绩 AS 本月成绩
from
(
select * from tablename where 时间=date1
)tablenew1 left join
(
select 科目,成绩 as 上月成绩
from tablename
where 时间 = date2
) tablenew2 on tablenew1.科目=tablenew2.科目
-------------------------------------------------
select tablenew1.时间,tablenew1.科目,tablenew1.上月成绩,tablenew2.本月成绩 from
(
select 时间,科目,成绩 AS 上月成绩 from km where 时间=(Convert(varchar(10),month(GETDATE())-1))+ '月 '
) tablenew1 left join (
select 时间,科目,成绩 AS 本月成绩 from km where 时间=(Convert(varchar(10),month(GETDATE())))+ '月 '
)
tablenew2 on tablenew1.科目 = tablenew2.科目
-------------------------------------------------
??
呵呵
揭帖了
[解决办法]
Create Table TEST
(时间Varchar(10),
科目Nvarchar(10),
成绩Int)
Insert TEST Select N '2月 ', N '语文 ', 80
Union All Select N '2月 ', N '数学 ', 70
Union All Select N '2月 ', N '英语 ', 76
Union All Select N '2月 ', N '物理 ', 70
Union All Select N '1月 ', N '语文 ', 76
Union All Select N '1月 ', N '数学 ', 65
Union All Select N '1月 ', N '英语 ', 70
Union All Select N '1月 ', N '物理 ', 68
GO
Select
A.时间,
A.科目,
B.成绩 As 上月成绩,
A.成绩 As 本月成绩
From TEST A
Left Join TEST B
On A.科目 = B.科目 And Replace(A.时间, N '月 ', ' ') = Replace(B.时间, N '月 ', ' ') + 1
Order By A.时间
GO
Drop Table TEST
/*
时间科目上月成绩本月成绩
1月语文NULL76
1月数学NULL65
1月英语NULL70
1月物理NULL68
2月语文7680
2月数学6570
2月英语7076
2月物理6870
*/


[解决办法]
create table test
(
Months nvarchar(12),
Subject nvarchar(12),
Result decimal(18,2),
)
insert into test values( '2月 ', '语文 ',80)
insert into test values( '2月 ', '数学 ',70)
insert into test values( '2月 ', '英语 ',76)
insert into test values( '2月 ', '物理 ',70)

insert into test values( '1月 ', '语文 ',76)
insert into test values( '1月 ', '数学 ',65)
insert into test values( '1月 ', '英语 ',70)
insert into test values( '1月 ', '物理 ',68)

declare @Pm nvarchar(12) --上月,具体你可以根据当月自己计算
declare @Cm nvarchar(12) --本月
select @Pm= '1月 '
select @Cm= '2月 '
select @Cm as '时间 ',P.Subject,P.PResult as '上月成绩 ',C.CResult as '本月成绩 ' from
(
select Months,Subject, Result as PResult from test where Months=@Pm
)P
left join
(
select Months,Subject,Result as CResult from test where Months=@Cm
)C on C.Subject=P.subject
--from test (去掉)
--打多一个

Drop table test

[解决办法]
或者

Select
A.时间,
A.科目,
(Select 成绩 From TEST Where 科目 = A.科目 And Replace(时间, N '月 ', ' ') = Replace(A.时间, N '月 ', ' ') - 1) As 上月成绩,


A.成绩 As 本月成绩
From TEST A
Order By A.时间
[解决办法]
典型的行转列

USE Northwind
GO

CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO

下面是用于创建旋转结果的 SELECT 语句:

SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO

在IE栏输入
mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\acdata.chm::/ac_8_qd_14_04j7.htm
有详细解说

读书人网 >asp.net

热点推荐