100分收购一个SQL语句???请大家帮帮忙!!!

gengwanshanreally 2008-11-20 05:22:12
我的数据库是这样的:
Id int identity(1,1) primary key not null,
Category varchar(10) not null, --收入、支出
Item varchar(20) not null, --项目:音响、键盘
Date datetime not null, --日期
MyMoney money not null, --金额
Remark varchar(max) --备注

我想输出的数据是这样的:
日期 收入 支出
2008-11-11 5.00 2.00
2008-12-12 10.00 7.00

请问各位大虾这样该怎么做啊?第一个回答对的给80分!希望大家尽快回复。
...全文
163 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengwanshanreally 2008-11-20
  • 打赏
  • 举报
回复
问题解决了,谢谢各位!
MicroDeviser 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 magicbacon 的回复:]
SQL codeSELECT CONVERT(varchar(100),Date, 23) AS 日期,
SUM(CASE WHEN Category='收入' THEN MyMoney END) AS 收入,
SUM(CASE WHEN Category='支出' THEN MyMoney END) AS 支出
FROM table_name
GROUP BY CONVERT(varchar(100),Date, 23)
[/Quote]

yoursWTR 2008-11-20
  • 打赏
  • 举报
回复
好像我理解错了,

别写一句SQL,有几句写几句,要么放在存储过程里处理要么放在程序里出里

takako_mu 2008-11-20
  • 打赏
  • 举报
回复

declare @sql varchar(max),@str varchar(max)
set @str=stuff(replace(replace((select distinct Date from table for xml auto)
,'<table Date="',','),'"/>',''),1,1,'')
set @sql ='select Date,'+ @str+' from table pivot (max(Category) for Date in ('+@str +'))as pvt'
exec(@sql)

未測試
antiking 2008-11-20
  • 打赏
  • 举报
回复
SELECT CONVERT(varchar(100),Date, 23),
SUM(CASE WHEN Category='收入' THEN MyMoney END),
SUM(CASE WHEN Category='支出' THEN MyMoney END)
FROM table_name
GROUP BY CONVERT(varchar(100),Date, 23)
yoursWTR 2008-11-20
  • 打赏
  • 举报
回复
你把收入、支出 写在一个字段里面了,所以你要确定你用什么字符来对2者分割的
下面的函数可以按字符分割字符串

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Uinatlex_Split]
(
@str VARCHAR(1024),
@split VARCHAR(10),
@index INT
)
RETURNS VARCHAR(1024)
AS
BEGIN
DECLARE @location INT
DECLARE @start INT
DECLARE @next INT
DECLARE @seed INT

SET @str=LTRIM(RTRIM(@str))
SET @start=1
SET @next=1
SET @seed=LEN(@split)

SET @location=CHARINDEX(@split,@str)
WHILE @location<>0 and @index>@next
BEGIN
SET @start=@location+@seed
SET @location=CHARINDEX(@split,@str,@start)
SET @next=@next+1
END
IF @location =0 SELECT @location =LEN(@str)+1

RETURN SUBSTRING(@str,@start,@location-@start)
END



比如你是按 '|'分割的,而收入再前
那么sql就是

SELECT Date AS 日期,dbo.Uinatlex_Split(Category,'|',0) AS 收入,dbo.Uinatlex_Split(Category,'|',1) AS 支出 FROM TABLE

gengwanshanreally 2008-11-20
  • 打赏
  • 举报
回复
我表名是:Accounts
1楼具体代码怎么写,希望有代码?
4楼的代码报错,不知道为什么?
magicbacon 2008-11-20
  • 打赏
  • 举报
回复
SELECT CONVERT(varchar(100),Date, 23) AS 日期,
SUM(CASE WHEN Category='收入' THEN MyMoney END) AS 收入,
SUM(CASE WHEN Category='支出' THEN MyMoney END) AS 支出
FROM table_name
GROUP BY CONVERT(varchar(100),Date, 23)
lilihua520 2008-11-20
  • 打赏
  • 举报
回复
你的收入和支出就是一个字段吗
不会啊
magicbacon 2008-11-20
  • 打赏
  • 举报
回复
SELECT CONVERT(varchar(100),Date, 23),
SUM(CASE WHEN Category='收入' THEN MyMoney END),
SUM(CASE WHEN Category='支出' THEN MyMoney END)
FROM table_name
GROUP BY CONVERT(varchar(100),Date, 23)
gengwanshanreally 2008-11-20
  • 打赏
  • 举报
回复
能具体写一下代码吗?
gongsun 2008-11-20
  • 打赏
  • 举报
回复
直观的把表和表里的数据列出来。
mjjzg 2008-11-20
  • 打赏
  • 举报
回复
你的收入和支出就是一个字段吗
Fibona 2008-11-20
  • 打赏
  • 举报
回复
select a.sdate as 日期,a.total as 支出,b.total as 收入
from (select sum(MyMoney),Date.year+Date.Month+Date.day as sdate from table1 where categ='支出' group by sData ) a
, (select sum(MyMoney),Date.year+Date.Month+Date.day as sdate from table1 where categ='收入' group by sData ) b
where a.sdate=b.sDate
takako_mu 2008-11-20
  • 打赏
  • 举报
回复
交叉表
看PIVOT
分享大哥 2008-11-20
  • 打赏
  • 举报
回复
最简单的处理方法;创建两个临时表,分别保存 日期、收入;日期、支出;
然后按日期来链接两个表就ok了

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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