請高手幫忙

谢良 2005-07-20 05:34:04
本人有兩個有關CrossTab(在PB中)的問題,請高手幫忙
  1:如何得到動態CrossTab中的Columns.
2:動態CrossTab中有關Sort 的問題,在CrossTab的報表上要用某一 Column 進行Sort,但不用看到也不要在報表上出顯此Column 。請高手指點!!

例:類別  排序碼 名稱     2005/01  2005/02  2005/03 ......2005/12  合計
  工資   10  營--工資    1000   1100   1200
        10  管--工資     1200 1250 1300
修理費  20  營--修理費   2000   3000   4000
        20 管--修理費 4000 4500 6000

  想要的結果:
  類別   名稱     2005/01  2005/02  2005/03 ......2005/12  合計
  工資    營--工資    1000   1100   1200
        管--工資     1200 1250 1300
修理費  營--修理費   2000   3000   4000
        管--修理費 4000 4500 6000

  如果不用排序碼進行排序結果是(不想要的):
  類別   名稱     2005/01  2005/02  2005/03 ......2005/12  合計
修理費  營--修理費   2000   3000   4000
        管--修理費 4000 4500 6000
  工資    營--工資    1000   1100   1200
        管--工資     1200 1250 1300
  本人試過在SQL上進行Sort 對CrossTab不起作用。
...全文
62 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
谢良 2005-07-23
請對CrossTab有高深研究的高手出手,謝謝了。
  • 打赏
  • 举报
回复
谢良 2005-07-20
把排序码直接加在名称上或是加在類別上,得出的排序順序是對的,但報表的要求就是不要看到排序碼。
  • 打赏
  • 举报
回复
冷箫轻笛 2005-07-20
1.应该有以前的帖子,你可以搜索一下,可以实现
2.就不清楚了,以前做的都是把排序码直接加在名称上
例:類別   名稱     2005/01  2005/02  2005/03 ......2005/12  合計
  工資   10營--工資    1000   1100   1200
       10管--工資     1200 1250 1300
修理費  20營--修理費   2000   3000   4000
       20管--修理費 4000 4500 6000

另:你可以用SQL语句先进行查询,直接实现交叉表的效果,然后用一般的数据窗口就可以
附:邹老大的一段代码
-------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_qry]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_qry]
GO

/*--生成交叉表的简单通用存储过程

根据指定的表名,纵横字段,统计字段,自动生成交叉表
并可根据需要生成纵横两个方向的合计

注意,横向字段数目如果大于纵向字段数目,将自动交换纵横字段
如果不要此功能,则去掉交换处理部分

--邹建 2004.06(引用请保留此信息)--*/

/*--调用示例

exec p_qry 'syscolumns','id','colid','colid','name like ''s%''',1,1
--*/

create proc p_qry
@TableName sysname,--表名
@纵轴 sysname,--交叉表最左面的列
@横轴 sysname,--交叉表最上面的列
@表体内容 sysname,--交叉表的数数据字段
@条件 varchar(1000),--查询的处理条件
@是否加横向合计 bit,--为1时在交叉表横向最右边加横向合计
@是否家纵向合计 bit--为1时在交叉表纵向最下边加纵向合计
as
declare @s nvarchar(4000),@sql varchar(8000)

--规范条件
set @条件=case when @条件<>'' then ' where ('+@条件+')' else '' end

--判断横向字段是否大于纵向字段数目,如果是,则交换纵横字段
set @s='declare @a sysname
if(select case when count(distinct ['+@纵轴+'])<count(distinct ['+@横轴+']) then 1 else 0 end
from ['+@TableName+'] '+@条件+')=1
select @a=@纵轴,@纵轴=@横轴,@横轴=@a'
exec sp_executesql @s
,N'@纵轴 sysname out,@横轴 sysname out'
,@纵轴 out,@横轴 out

--生成交叉表处理语句
set @s='
set @s=''''
select @s=@s+'',[''+cast(['+@横轴+'] as varchar)+'']=sum(case ['+@横轴
+'] when ''''''+cast(['+@横轴+'] as varchar)+'''''' then ['+@表体内容+'] else 0 end)''
from ['+@TableName+']
'+@条件+'
group by ['+@横轴+']'
exec sp_executesql @s
,N'@s varchar(8000) out'
,@sql out

--是否生成合计字段的处理
declare @sum1 varchar(200),@sum2 varchar(200),@sum3 varchar(200)
select @sum1=case @是否加横向合计
when 1 then ',[合计]=sum(['+@表体内容+'])'
else '' end
,@sum2=case @是否家纵向合计
when 1 then '['+@纵轴+']=case grouping(['
+@纵轴+']) when 1 then ''合计'' else cast(['
+@纵轴+'] as varchar) end'
else '['+@纵轴+']' end
,@sum3=case @是否家纵向合计
when 1 then ' with rollup'
else '' end

--生成交叉表
exec('select '+@sum2+@sql+@sum1+'
from ['+@TableName+']
'+@条件+'
group by ['+@纵轴+']'+@sum3)
go
-------------------------------------------------
  • 打赏
  • 举报
回复
相关推荐
讓你能在各大人力銀行上留言討論職缺,減少求職的資訊不對稱 隱私權和使用者條款: https://www.qollie.com/policy Qollie-求職天眼通旨在打造一個專屬於工作者的交流平台! 該插件會在你瀏覽各大人力銀行的公司與職缺時自動啟動,你能在留言區留下寶貴的工作經驗,也能瀏覽其他用戶的心得並參與討論。 插件上的留言全都會即時同步到網站上,讓使用網站的用戶也能持續追蹤與討論,再搭配網站上的搜尋功能,迅速檢索公司與職缺並參與評論, 讓資訊更透明、傳遞更快速。 我們希望台灣的職場環境,能因為大家交流與分享的力量,變得越來越好! p.s插件無法透過手機運行,需要使用手機瀏覽的用戶直接瀏覽網頁版本: https://www.qollie.com Changelog v 4.5.0 - 搭配企業認證功能的資料結構調整 - 更新評論卡顯示的樣式 - 更新回覆的樣式 v 4.0.1 - 修復一些在插件上沒辦法連到網站的 bug - 修復一些登入的 bug v 4.0.0 - 網站正式上線: https://www.qollie.com v 3.6.4 - 修復 1111 留言 v 3.6.0 - 整合求職透明化運動,會查出該公司底下職缺的每週平均工時 v 3.5.0 - 整合求職小幫手,會查出這個職缺的公司是否有違反勞基法。 儘管台灣的人力銀行已經是大部分人習慣的求職平台, 但其盈利模式大多是向企業收取年費, 而大部分企業並不喜歡求職者間的資訊太過流通, 或者是基於其他諸多考量,缺少了讓求職者能夠討論的功能 而 Clairvoyance 正是為了把這個「應該要存在的功能」給實現的插件, 希望能減少資訊的不對稱,讓好職缺被看見的更多, 同時也省掉去面試差勁職缺的時間。 目前支援 1111, 104, yes123 , 518 四間人力銀行。 支持语言:中文 (繁體)
JDK 1.5的泛型實現(Generics in JDK 1.5) 1 侯捷觀點 JDK 1.5的泛型實現 — Generics in JDK 1.5 — 北京《程序員》 2004/09 台北《Run!PC》2004/09 作者簡介:侯捷,資訊教育、專欄執筆、大學教師。常著文章自娛,頗示己志。 侯捷網站:http://www.jjhou.com(繁體) 北京鏡站:http://jjhou.csdn.net(簡體) 永久郵箱:jjhou@jjhou.com . 讀者基礎:有 Java語言基礎,使用過 Java Collections。 . 本文適用工具: JDK1.5 . 本文程式源碼可至侯捷網站下載 http://www.jjhou.com/javatwo-2004-reflection-and-generics-in-jdk15-sample.ZIP . 本文是 JavaTwo-2004技術研討會同名講題之部分內容書面整理。 . 關鍵術語: persistence(永續性、持久性) serialization(序列化、次第讀寫) generics(泛型) polymorphism(多型) 全文提要 泛型技術與 Sun JDK的淵源可追溯自 JDK1.3。但無論 JDK 1.3或 JDK1.4,都只是 以編譯器外掛附件的方式來支援泛型語法,並且 Java標準程式庫未曾針對泛型全 侯捷觀點 Generics in JDK 1.5 面改寫。而今 JDK1.5正式納入泛型。本文討論 JDK1.5的泛型實現,包括如何使 用及自訂 generic classes and algorithms,其中若干語法異於 JDK 1.3和 1.4。 我 我我我我曾經在 JavaTwo 2002大會上針對泛型技術給出一個講題,並將內容整理為《Java 泛型技術之發展》一文(http://www.jjhou.com/javatwo-2002.htm)。該文所談的 Java 泛型語法以及 Java泛型技術之內部實作技術,在今天(被 JDK 1.5正式納入)依 然適用。但由於有了若干小變化,並且由於 Java標準程式庫的全面改寫,使我認 為有必要再整理這篇文章,讓讀者輕鬆地在 JDK 1.5中繼續悠遊「泛型」技術。 閱讀本文之前,如果自覺基礎不夠,可以補充閱讀適才提到的《Java泛型技術之 發展》,那是一篇非常完整的文章,可助您完整認識泛型技術的來龍去脈。 Sun JDK的泛型發展歷史要從 1.3版說起。該版本配合 GJ,正式進入泛型殿堂。 所謂 GJ是 "Generic Java" 的縮寫,是一個支援泛型的 Java編譯器補充件,可謂 Java 泛型技術的先趨。隨後,泛型議題正式成為 JSR #14,其技術基礎便是源自 GJ。 JDK1.4搭配 JSR14提供的外掛附件,使泛型技術在 Java世界從妾身未明的身份扶 正而為眾所屬目的焦點。今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 classes稱為 generic classes, 把帶有「參數化型別」的 methods稱為 generic algorithms,那麼,對眾多 Java程 式員而言,泛型帶來的影響不外乎以下四點,稍後逐一說明。 ..如何使用 generic classes ..如何使用 generic algorithms ..如何自訂 generic classes ..如何自訂 generic algorithms 在此先提醒您,運用泛型時,加上 –Xlint:unchecked編譯選項,可讓編譯器幫 助我們檢查潛在的型別轉換問題。 侯捷觀點 JDK 1.5的泛型實現(Generics in JDK 1.5)3 使用 Generic Classes Generic classes的最大宗運用是 collections(群集),也就是實作各種資料結構(例 如 list, map, set, hashtable)的那些 classes。也有人稱它們為容器( containers)。這 些容器被設計用來存放 Object-derived元素。而由於 Java擁有單根繼承體系,任 何 Java classes都繼承自 java.lang.Object,因此任何 Java ob
发帖
应用实例

2.7w+

社区成员

MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
帖子事件
创建了帖子
2005-07-20 05:34
社区公告
暂无公告