求一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
有详细解说