求一个复杂的sql 语句 高手来领分了。

莫鸣 2010-07-05 12:30:29
如何用sql语句来实现这个查询内容?

数据是 : ID name 电费时间 电费 租金时间 租金
1 张三 2010-2-2 59 2010-3-2 30
2 里斯 2010-3-2 32 2010-2-12 20
3 王五 2010-2-2 34 2010-2-2 50
4 小罗 2010-3-1 33 2010-4-3 93

我要2010年2月份收款情况。比如是求2月份的。查询内容如下:

ID name 电费时间 电费 租金时间 租金
1 张三 2010-2-2 59
2 里斯 2010-2-12 20
3 王五 2010-2-2 34 2010-2-2 50

我要2010年3月份收款情况。比如是求3月份的。查询内容如下:

ID name 电费时间 电费 租金时间 租金
1 张三 2010-3-2 30
2 里斯 2010-3-2 32
4 小罗 2010-3-1 33
...全文
91 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2010-07-05
  • 打赏
  • 举报
回复
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (ID int,name varchar(4),电费时间 datetime,电费 int,租金时间 datetime,租金 int)
insert into [tb]
select 1,'张三','2010-2-2',59,'2010-3-2',30 union all
select 2,'里斯','2010-3-2',32,'2010-2-12',20 union all
select 3,'王五','2010-2-2',34,'2010-2-2',50 union all
select 4,'小罗','2010-3-1',33,'2010-4-3',93
go


declare @time varchar(10)
set @time='2010-2'
select id,name,
电费时间=case when datediff(mm,电费时间,@time+'-01')=0 then 电费时间 else null end,
电费=case when datediff(mm,电费时间,@time+'-01')=0 then 电费 else null end,
租金时间=case when datediff(mm,租金时间,@time+'-01')=0 then 租金时间 else null end,
租金=case when datediff(mm,租金时间,@time+'-01')=0 then 租金 else null end
from [tb]
where datediff(mm,电费时间,@time+'-01')=0 or datediff(mm,租金时间,@time+'-01')=0

--结果:
id name 电费时间 电费 租金时间 租金
----------- ---- ----------------------- ----------- ----------------------- -----------
1 张三 2010-02-02 00:00:00.000 59 NULL NULL
2 里斯 NULL NULL 2010-02-12 00:00:00.000 20
3 王五 2010-02-02 00:00:00.000 34 2010-02-02 00:00:00.000 50


guguda2008 2010-07-05
  • 打赏
  • 举报
回复
--> 测试数据: [A]
--无耻的抄袭狼哥的数据
if object_id('[A]') is not null drop table [A]
GO
create table [A] (ID int,name varchar(4),电费时间 datetime,电费 int,租金时间 datetime,租金 int)
insert into [A]
select 1,'张三','2010-2-2',59,'2010-3-2',30 union all
select 2,'里斯','2010-3-2',32,'2010-2-12',20 union all
select 3,'王五','2010-2-2',34,'2010-2-2',50 union all
select 4,'小罗','2010-3-1',33,'2010-4-3',93

DECLARE @BDATE DATETIME,@EDATE DATETIME
SELECT @BDATE='2010-2-1',@EDATE='2010-2-28'
SELECT
ID,NAME
,CASE WHEN 电费时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),电费时间,120) ELSE '' END
,CASE WHEN 电费时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),电费) ELSE '' END
,CASE WHEN 租金时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),租金时间,120) ELSE '' END
,CASE WHEN 租金时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),租金) ELSE '' END
FROM
A
WHERE 电费时间 BETWEEN @BDATE AND @EDATE OR 租金时间 BETWEEN @BDATE AND @EDATE
/*
1 张三 2010-02-02 59
2 里斯 2010-02-12 20
3 王五 2010-02-02 34 2010-02-02 50
*/
永生天地 2010-07-05
  • 打赏
  • 举报
回复
--建立测试环境
IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb
GO
CREATE TABLE tb
(
id int ,
name varchar(10),
电费时间 varchar(20),
电费 int,
租金时间 varchar(20),
租金 int
CONSTRAINT PK_TB PRIMARY KEY (id)
)
GO
INSERT TB
select '1','张三','2010-2-2','59','2010-3-2','30' union all
select '2','里斯','2010-3-2','32','2010-2-12','20' union all
select '3','王五','2010-2-2','34','2010-2-2','50' union all
select '4','小罗','2010-3-1','33','2010-4-3','93'

--查询
select ID ,name,
case when convert(varchar(7),cast(电费时间 as datetime),120)='2010-02' then 电费时间 else '' end as [电费时间] ,
case when convert(varchar(7),cast(电费时间 as datetime),120)='2010-02' then 电费 else '' end as [电费] ,
case when convert(varchar(7),cast(租金时间 as datetime),120)='2010-02' then 租金时间 else '' end as [租金时间] ,
case when convert(varchar(7),cast(租金时间 as datetime),120)='2010-02' then 租金 else '' end as [租金]
from tb
where convert(varchar(7),cast(电费时间 as datetime),120)='2010-02'
or convert(varchar(7),cast(租金时间 as datetime),120)='2010-02'
--结果
/*

(4 行受影响)
ID name 电费时间 电费 租金时间 租金
----------- ---------- -------------------- ----------- -------------------- -----------
1 张三 2010-2-2 59 0
2 里斯 0 2010-2-12 20
3 王五 2010-2-2 34 2010-2-2 50

(3 行受影响)
*/
--查询
select ID ,name,
case when convert(varchar(7),cast(电费时间 as datetime),120)='2010-03' then 电费时间 else '' end as [电费时间] ,
case when convert(varchar(7),cast(电费时间 as datetime),120)='2010-03' then 电费 else '' end as [电费] ,
case when convert(varchar(7),cast(租金时间 as datetime),120)='2010-03' then 租金时间 else '' end as [租金时间] ,
case when convert(varchar(7),cast(租金时间 as datetime),120)='2010-03' then 租金 else '' end as [租金]
from tb
where convert(varchar(7),cast(电费时间 as datetime),120)='2010-03'
or convert(varchar(7),cast(租金时间 as datetime),120)='2010-03'
--结果
/*
ID name 电费时间 电费 租金时间 租金
----------- ---------- -------------------- ----------- -------------------- -----------
1 张三 0 2010-3-2 30
2 里斯 2010-3-2 32 0
4 小罗 2010-3-1 33 0

(3 行受影响)


*/
feixianxxx 2010-07-05
  • 打赏
  • 举报
回复
注意你的 时间字段类型 如果是datetime就用 CONVERT转换 如果不是 直接LIKE~
feixianxxx 2010-07-05
  • 打赏
  • 举报
回复
select 
id,
name,
电费时间=case when 电费时间 like '2010-02%' then 电费时间 else ''end,
电费=case when 电费时间 like '2010-02%' then rtrim(电费) else ''end,
租金时间=case when 租金时间 like '2010-02%' then 租金时间 else ''end,
租金=case when 租金时间 like '2010-02%' then rtrim(租金) else ''end
from tb
where 电费时间 like '2010-2%'
or 租金时间 like '2010-02%'
bancxc 2010-07-05
  • 打赏
  • 举报
回复
select ID,name,
case when month(电费时间)=3 then 电费时间 else Null end as 电费时间,
case when month(电费时间)=3 then 电费 else Null end as 电费,
case when month(租金时间)=3 then 租金时间 else Null end as 租金时间,
case when month(租金时间)=3 then 租金 else Null end as 租金
from [A] where month(电费时间)=3 or month(租金时间)=3

ID name 电费时间 电费 租金时间 租金
----------- ---- ----------------------- ----------- ----------------------- -----------
1 张三 NULL NULL 2010-03-02 00:00:00.000 30
2 里斯 2010-03-02 00:00:00.000 32 NULL NULL
4 小罗 2010-03-01 00:00:00.000 33 NULL NULL

(3 行受影响)
bancxc 2010-07-05
  • 打赏
  • 举报
回复
--> 测试数据: [A]
if object_id('[A]') is not null drop table [A]
create table [A] (ID int,name varchar(4),电费时间 datetime,电费 int,租金时间 datetime,租金 int)
insert into [A]
select 1,'张三','2010-2-2',59,'2010-3-2',30 union all
select 2,'里斯','2010-3-2',32,'2010-2-12',20 union all
select 3,'王五','2010-2-2',34,'2010-2-2',50 union all
select 4,'小罗','2010-3-1',33,'2010-4-3',93

select ID,name,
case when month(电费时间)=2 then 电费时间 else Null end as 电费时间,
case when month(电费时间)=2 then 电费 else Null end as 电费,
case when month(租金时间)=2 then 租金时间 else Null end as 租金时间,
case when month(租金时间)=2 then 租金 else Null end as 租金
from [A] where month(电费时间)=2 or month(租金时间)=2


ID name 电费时间 电费 租金时间 租金
----------- ---- ----------------------- ----------- ----------------------- -----------
1 张三 2010-02-02 00:00:00.000 59 NULL NULL
2 里斯 NULL NULL 2010-02-12 00:00:00.000 20
3 王五 2010-02-02 00:00:00.000 34 2010-02-02 00:00:00.000 50

(3 行受影响)
永生天地 2010-07-05
  • 打赏
  • 举报
回复
select ID ,name,
case when convert(varchar(7),电费时间,120)='2010-02' then 电费时间 else '' end as [电费时间] ,
case when convert(varchar(7),电费时间,120)='2010-02' then 电费 else '' end as [电费] ,
case when convert(varchar(7),租金时间,120)='2010-02' then 租金时间 else '' end as [租金时间] ,
case when convert(varchar(7),租金时间,120)='2010-02' then 租金 else '' end as [租金]
from tb
where convert(varchar(7),电费时间,120)='2010-02'
or convert(varchar(7),租金时间,120)='2010-02'
guguda2008 2010-07-05
  • 打赏
  • 举报
回复
DECLARE @BDATE DATETIME,@EDATETIME
SELECT @BDATE='2010-2-1',@EDATE='2010-2-28'
SELECT
ID,NAME
,CASE WHEN 电费时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),电费时间,120) ELSE '' END
,CASE WHEN 电费时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),电费) ELSE '' END
,CASE WHEN 租金时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),租金时间,120) ELSE '' END
,CASE WHEN 租金时间 BETWEEN @BDATE AND @EDATE THEN CONVERT(VARCHAR(10),租金) ELSE '' END
FROM
表名
WHERE 电费时间 BETWEEN @BDATE AND @EDATE OR 租金时间 BETWEEN @BDATE AND @EDATE
永生天地 2010-07-05
  • 打赏
  • 举报
回复
select * from tb
where convert(varchar(7),电费时间,120)='2010-02'
or convert(varchar(7),租金时间,120)='2010-02'

select * from tb
where convert(varchar(7),电费时间,120)='2010-03'
or convert(varchar(7),租金时间,120)='2010-03'
bancxc 2010-07-05
  • 打赏
  • 举报
回复
没看懂规则....
douruqing 2010-07-05
  • 打赏
  • 举报
回复
如何用sql语句来实现这个查询内容?
莫鸣 2010-07-05
  • 打赏
  • 举报
回复
应该是这样子的题目,上面显示不出效果。
莫鸣 2010-07-05
  • 打赏
  • 举报
回复


如何用sql语句来实现这个查询内容?

数据是 : ID name 电费时间 电费 租金时间 租金
1 张三 2010-2-2 59 2010-3-2 30
2 里斯 2010-3-2 32 2010-2-12 20
3 王五 2010-2-2 34 2010-2-2 50
4 小罗 2010-3-1 33 2010-4-3 93

我要2010年2月份收款情况。比如是求2月份的。查询内容如下:

ID name 电费时间 电费 租金时间 租金
1 张三 2010-2-2 59
2 里斯 2010-2-12 20
3 王五 2010-2-2 34 2010-2-2 50

我要2010年3月份收款情况。比如是求3月份的。查询内容如下:

ID name 电费时间 电费 租金时间 租金
1 张三 2010-3-2 30
2 里斯 2010-3-2 32
4 小罗 2010-3-1 33

莫鸣 2010-07-05
  • 打赏
  • 举报
回复
多谢了...学习了。.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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