这样的数据窗口怎么实现,,,大家帮我忙啊………… 在线等……

恶鱼 2004-09-03 07:34:47
从两张表里取数据 表 craft , 表 product 主键为 craftno
其中表product里有N个不同的产品颜色 P_color
每一种颜色的产品又对应不同的工序 glideno 工序是按一定的顺序 glideorder
现在我要做一个数据窗口的效果如下:

产品颜色 产品颜色 产品颜色 产品颜色
A B C D ………………
工序次序 工序名称 工序名称 工序名称 工序名称 ………………
1 123 - 123 - ………………
2 234 234 234 - ………………
3 345 - - - ………………
4 456 456 456 456 ………………
5 567 - - - ………………
. . 678 678 678 ………………
. . . . 789 ………………
. . . . . ………………
. . . . . ………………


这样的表格怎么做啊,我不会了,大家帮一下我啊,现在我先谢一下。
大家说一下最好有详细一点的例子

...全文
163 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
azh9703 2004-09-06
  • 打赏
  • 举报
回复
交叉报表适合做统计数据。注意紧跟TRANSFORM关键字的是一个SQL集合函数,这是必需的,那怕不进行任何计算。GROUPBY子句也是必需的。
klbt 2004-09-05
  • 打赏
  • 举报
回复
交叉表适合动态数据
恶鱼 2004-09-05
  • 打赏
  • 举报
回复
可是我表里的数据都是动态的啊。
想看一下详细一点的例子
xuexy1980_xxy1980 2004-09-05
  • 打赏
  • 举报
回复
动态报表太麻烦了,我建议用交叉表!
恶鱼 2004-09-05
  • 打赏
  • 举报
回复
我想用动态建表就是不知道怎么建,。
大家再帮我一下
xuexy1980_xxy1980 2004-09-05
  • 打赏
  • 举报
回复
没有关系啊
我那个例子的数据也是动态的
就是因为是动态的 才用交叉表 比较方便 你照着我那个例子做就可以实现你要的效果了
peixun 2004-09-05
  • 打赏
  • 举报
回复
交叉表处理动态数据太方便了
8193102 2004-09-04
  • 打赏
  • 举报
回复
交叉列的缺点就是如果要一张完整表而数据不全(比较数据中只有3个季度),这样全表的4个季度好象就出不来,
xuexy1980_xxy1980 2004-09-03
  • 打赏
  • 举报
回复
建议用交叉表实现,就你的例子具体实现方法如下面这个例子:
SELECT cpbh, gxh, gxmc, 1 AS val
FROM gx
gx为表示各个产品加工工序的一张表,我们加一个虚字段val值为1。
我们建立如下的交叉表:

行为:工序号(gxh)、工序名称(gxmc)
列为:产品(cpbh)
Value为:一个计算字段IF(val = 1,gxmc,'-')或IF(val = 1,gxh,'-')
这个小方法我已经用过了:)
你看一下,应该可以解决你的问题了!
恶鱼 2004-09-03
  • 打赏
  • 举报
回复
谢谢了
workhand 2004-09-03
  • 打赏
  • 举报
回复
希望能帮助你
workhand 2004-09-03
  • 打赏
  • 举报
回复
【转贴】

交叉数据报表
有时候需要旋转结果以便在水平方向显示列,而在垂直方向显示行。这就是所谓的创建 PivotTable®、创建交叉数据报表或旋转数据。

假定有一个表 Pivot,其中每季度占一行。对 Pivot 的 SELECT 操作在垂直方向上列出这些季度:

Year Quarter Amount
---- ------- ------
1990 1 1.1
1990 2 1.2
1990 3 1.3
1990 4 1.4
1991 1 2.1
1991 2 2.2
1991 3 2.3
1991 4 2.4

生成报表的表必须是这样的,其中每年占一行,每个季度的数值显示在一个单独的列中,如:

Year
Q1
Q2
Q3
Q4

1990
1.1
1.2
1.3
1.4

1991
2.1
2.2
2.3
2.4



下面的语句用于创建 Pivot 表并在其中填入第一个表中的数据:

USE Northwind
GO

CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO

下面是用于创建旋转结果的 SELECT 语句:

SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO

该 SELECT 语句还处理其中每个季度占多行的表。GROUP BY 语句将 Pivot 中一年的所有行合并成一行输出。当执行分组操作时,SUM 聚合中的 CASE 函数的应用方式是这样的:将每季度的 Amount 值添加到结果集的适当列中,在其它季度的结果集列中添加 0。

如果该 SELECT 语句的结果用作电子表格的输入,那么电子表格将很容易计算每年的合计。当从应用程序使用 SELECT 时,可能更易于增强 SELECT 语句来计算每年的合计。例如:

SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotal
FROM (SELECT Year,
SUM(CASE P.Quarter WHEN 1 THEN P.Amount ELSE 0 END) AS Q1,
SUM(CASE P.Quarter WHEN 2 THEN P.Amount ELSE 0 END) AS Q2,
SUM(CASE P.Quarter WHEN 3 THEN P.Amount ELSE 0 END) AS Q3,
SUM(CASE P.Quarter WHEN 4 THEN P.Amount ELSE 0 END) AS Q4
FROM Pivot AS P
GROUP BY P.Year) AS P1
GO

带有 CUBE 的 GROUP BY 和带有 ROLLUP 的 GROUP BY 都计算与本例显示相同的信息种类,但格式稍有不同。
例子:

在ms sql server2000中已经有如下的一个表:

姓名 科目 成绩
张三 语文 80
张三 数学 86
张三 英语 75
李四 语文 78
李四 数学 85
李四 英语 78

要想得到如下结果:

姓名 语文 数学 英语
张三 80 86 75
李四 78 85 78

请写出sql语句.
declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 科目 when '''+科目+''' then 成绩 end) ['+科目+']'
from (select distinct 科目 from 有一表) as a
select @sql = @sql+' from 有一表 group by 姓名'

exec(@sql)
go

workhand 2004-09-03
  • 打赏
  • 举报
回复
主要是把表里的记录行变成dw里的列,用sql语句就可以实现

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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