数据库查询问题

强脚的花 2017-06-21 06:45:27
【问题描述】
我有一个表table1 有3个字段
date_time user_id money
---------------------------------------------------------------
20160104 0002 95.32
20160105 0001 44.6
20160105 0002 100.3
... ... ...


我想要查的结果是类似下面的:
date_time 0001 0002 。。。。
------------------------------------------------------------------------------------
20160101 0.0 0.0 。。。。
20160102 0.0 0.0 。。。。
20160103 0.0 0.0 。。。。
20160104 0.0 95.32 。。。。
20160105 44.6 100.3 。。。。
。。。。 。。。 。。。 。。。。

1、首先我想要日期是2016年一整年所有的天数 ,日期表date中列出了所有的日期date_time (2016年全年366天)
2、有些客户号是中间某个时间才添加进来的,以前是没有这个客户时间的时候 money为0.0
3、结果表中我想列出所有客户的money 每一列代表一个客户,客户号表user 列出了所有客户的user_id

或者有大神有更好的方法介绍下。
...全文
266 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2017-06-21
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([date_time] Date,[user_id] nvarchar(24),[money] decimal(18,8))
Insert #T
select '20160104',N'0002',95.32 union all
select '20160105',N'0001',44.6 union all
select '20160105',N'0002',100.3 union all
select '20160105',N'0003',100.3
Go
--测试数据结束
DECLARE @sql NVARCHAR(4000);
SET @sql = 'select DATEADD(DAY,number,''2016-01-01'') AS [date_time]';
SELECT @sql = @sql + ',max(case when [user_id] = ''' + RTRIM([user_id])
+ ''' then [money] else null end ) as [' + RTRIM([user_id]) + ']'
FROM ( SELECT DISTINCT
[user_id]
FROM #T
) a;
SET @sql = @sql
+ ' from master..spt_values LEFT JOIN #T ON DATEADD(DAY,number,''2016-01-01'') = [date_time]
WHERE type = ''P'' group by DATEADD(DAY,number,''2016-01-01'')';
EXEC(@sql);



34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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