惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Register - Security
The Register - Security
P
Privacy International News Feed
月光博客
月光博客
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
V
Visual Studio Blog
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News
罗磊的独立博客
Vercel News
Vercel News
Last Week in AI
Last Week in AI
A
About on SuperTechFans
P
Proofpoint News Feed
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
T
Tailwind CSS Blog
GbyAI
GbyAI
S
Schneier on Security
L
LINUX DO - 热门话题
C
CERT Recently Published Vulnerability Notes
AWS News Blog
AWS News Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Hacker News
The Hacker News
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
C
Cybersecurity and Infrastructure Security Agency CISA
I
Intezer
V2EX - 技术
V2EX - 技术
The GitHub Blog
The GitHub Blog
Scott Helme
Scott Helme
V
V2EX
IT之家
IT之家
S
SegmentFault 最新的问题
爱范儿
爱范儿
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
S
Security Affairs
Security Latest
Security Latest
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
S
Secure Thoughts
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed

博客园 - 留不住的时光

怎样才能将XML文件导入SQL Server 2000? ERP系统模块完全解析──物料编码分章(二) ERP系统模块完全解析──主生产计划MPS MS Project 2003 安装手记 Asp中一些FSO方面的函数 我为Delphi着迷——Danny Thorpe访谈录 (转贴) 企业的含义 ERP系统模块完全解析──工作中心 『数据库系统概论』学习笔记之七 ERP中MRP运算基本名词解析 如何使MSSQL的日志文件不再增大? ERP系统模块完全解析──物料编码分章(一) [旧瓶装新酒]XML在ASP中的应用 《发布专题》发布我的WEB ERP预览 ERP系统模块完全解析──BOM分章 ADO.net 中数据库连接方式 文 档 编 制 步 骤 『数据库系统概论』学习笔记之六 汉字编码知识了解
SQL语言高级技法演练
留不住的时光 · 2005-04-25 · via 博客园 - 留不住的时光

SQL语言高级技法演练
  --
再谈列转行二维交叉表的实现

        某人在数据库中变态地设计了如下的一个表格,用于记录工厂预算额和实际发生额:

tkey code description year get_1 get_2 get_3 get_4 get_5 get_6 get_7 get_8 get_9 get_10 get_11 get_12 used_1 used_2 used_3 used_4 used_5 used_6 used_7 used_8 used_9 used_10 used_11 used_12
15 XX1 財務部預算 2004 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 0 0 0 0 0 0 0 0 0 0 0 0
16 XX2 工程部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000 1200 1300 1400 1000 2000 3000 1000 2000 3000 1002 2002
17 XX3 MIS部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 5000 200 2110 1566 200 330 55 222 222 111 33 322
18 XX4 市場部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 0 0 0 0 0 544 0 4522 5412 0 0 45553
19 XX5 動力部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 5200 5110 5412 5422 7521 0 4221 0 4221 4422 4695 5487
20 XX6 發展部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 5200 5110 5412 5422 7521 9442 4221 4522 0 4422 0 5487
21 XX7 計劃部預算 2004 3000000 9000000 9000000 9000000 9000000 9000000 9000000 9000000 9000000 8000000 4000000 3000000 5200 5110 5412 0 7521 0 4221 0 4221 0 4695 5487
22 XX8 生產部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 5200 5110 5412 5422 7521 9442 4221 4522 4221 4422 4695 5487
23 XX9 采購部預算 2004 1000000 1000000 20000000 20000000 9000000 9000000 1000000 1000000 1000000 1000000 1000000 1000000 5200 5110 5412 5422 7521 9442 4221 4522 4221 0 0 0
24 XX10 品質部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 5200 5110 5412 5422 0 0 4221 0 286 8744 522 44
25 XX11 行政部預算 2004 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 5200 5110 5412 0 7521 9442 4221 0 544 1224 4695 552
33 XX3 MIS預算 2005 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 0 5110 5412 5422 0 0 0 0 0 0 0 0
34 XX1 財務部預算 2005 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0
35 XX4 市場部預算 2005 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0
36 XX11 行政部預算 2005 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 0 0 0 120.84 0 0 0 0 0 0 0 0

        但在程序中却又要以如下界面(方式)进行录入和显示:

tkey code description 限額 發生額
17 XX3 MIS部預算 2004 1 1000000   2060
17 XX3 MIS部預算 2004 2 1000000 312
17 XX3 MIS部預算 2004 3 1000000 453
17 XX3 MIS部預算 2004 4 1000000 65
17 XX3 MIS部預算 2004 5 1000000 611
17 XX3 MIS部預算 2004 6 1000000 767
17 XX3 MIS部預算 2004 7 1000000 12
17 XX3 MIS部預算 2004 8 1000000 2
17 XX3 MIS部預算 2004 9 1000000 295
17 XX3 MIS部預算 2004 10 1000000 411
17 XX3 MIS部預算 2004 11 1000000 162
17 XX3 MIS部預算 2004 12 1000000 188

        怎幺办?你有办法吗?你能用最简洁的SQL语句来实现吗?
如果有兴趣,大家一起来探讨,我这里给出一个示例,可能不是最好的方法,
但也算是比较完美地解决了这道还算比较难办的题。

Create procedure sp_BudGet( 
@keyid int 

As 
declare @sql varchar(8000
set @sql=' select tkey,code,description,year,' 
select @sql=@sql+rtrim(name)+' as 限額 ,used'+right(name,len(name)-3)+' as 發生額  from data2 where tkey='+cast(@keyid as varchar(3))+' union all select tkey,code,description,year, ' from syscolumns where id=object_id('data2'and name like 'get_%'  order by colorder 
set @sql=left(@sql,len(@sql)-len(' union all select tkey,code,description,year,')) 
print @sql 
exec(@sqlGO 


        

以上存储过程接受一个tkey的传入参数,用于显示某一部门的年度预算,
其中的要点在于在从"syscolumns"表中查询字段名时动态构建一条真实的查询语句,
并且在查询语句中用union合成12个月的预算额和实际发生额。当然,这个表中的字段有
一定的规律,要是全部都没规律,那就只能老老实实的一个一个的写了。

        上面的表格貼得不大好,還請見諒,如有更好的語句,請告訴我。:)

上山砍柴去 2005-04-25 于 博客园