求救:SQL好难啊,我郁闷!!!请大家帮帮我啊,我要完蛋了 找免费库存管理软件
表tTab
锻炼类型ID 锻炼类型
-----------------------------------------
1 跑步
2 游泳
3 打蓝球
表STab
ID 姓名 锻炼类型ID 锻炼分种
-----------------------------------------
1 张三 1 10
3 张三 2 20
4 张三 3 30
5 李四 1 25
6 李四 3 35
我想得到的结果如下
姓名 跑步时间 游泳时间 打蓝球时间
-------------------------------------------
张三 10 20 30
李四 25 0 35
而且锻炼类型将来可能还要增加,
以后可能会有
姓名 跑步时间 游泳时间 打蓝球时间 踢足球时间。。。 等等
---------------------------------------------------------------------
希望这个sql可以适应 表tTab 的变化来自动添加新的列
请问各位大侠,这个sql怎么写啊?请帮帮忙,非常感谢
2楼: 學習 ̄ 如仓库管理软件
3楼: 你看看Sql Server的交叉表的实现,相信会有帮助。
4楼: 收藏
5楼: 如果一个sql语句解决不了,可用临时表解决.
6楼: 可以用存储过程实现,用游标选出tTab的锻炼类型,然后动态计算出每一项的时间和,然后用left jion 语句联合
记账软件版7楼: 看来我也是来学习的
估计要写存储过程才行吧~
一条语句好象也不大可能实现哦
8楼: access有此功能
SQL Server要用临时库或存储过程来做
9楼: 编程思路
(1)对表STab排序
(2)建立一个clientdataset,字段为你想要的表
(3)循环读取表STab表,如果没有 此人则插入,有就编辑
(4)搞定
10楼: 用存储过程和临时表,就OK。
11楼: 这样查出来的结果集可以修改吗?我不光要查出来,还必须要修改。[:(]
12楼: 剛好看了看這個問題,解決辦法如下:
SELECT name, (CASE type WHEN 1 THEN SUM([time]) ELSE 0 END) AS ''跑步'',
(CASE type WHEN 2 THEN SUM([time]) ELSE 0 END) AS ''游泳'',
(CASE type WHEN 3 THEN SUM([time]) ELSE 0 END) AS ''打球''
FROM STab
GROUP BY type, name
[b]适应 表tTab 的变化来自动添加新的列[/b] 這個問題要實現就只有用存儲過程來修改 SQL 語句的組合了 如免费库存管理软件
13楼: 变通一下,换一种报表格式不行吗?
姓名
-------------------------------------------
张三
跑步时间 10
游泳时间 20
打蓝球时间 30
李四
跑步时间 25
游泳时间 0
打蓝球时间 35
效果也不错嘛。
记账软件版14楼: 不光是要查出数据来,还要对数据进行修改,可以实现吗?
15楼: 你究竟是在做 exe 程序還是僅僅 數據庫腳本開發?
只是數據庫腳本開發,更新程式是肯定要另做函數或存儲過程的,
如果是做 exe ,更新還不簡單??只要將對應的事件挂上一個對應的 Update 語句不就得了??
不要老想現成的代碼,自己動動手。
16楼: 动态SQL很容易实现的