当前位置:主页>销售管理软件> 列表

求救:SQL好难啊,我郁闷!!!请大家帮帮我啊,我要完蛋了 找免费库存管理软件

记账软件版1楼: 现有两个表,需要做一下变换
表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很容易实现的