首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

这样的表结构,如何以列表形式一行行显示出来

2012-02-17 
这样的表结构,怎么以列表形式一行行显示出来表结构:(主键,递增)(标识)IDCodeClassNameClassValue1100姓名

这样的表结构,怎么以列表形式一行行显示出来
表结构:
      (主键,递增)                 (标识)
              ID                             Code                   ClassName                   ClassValue

              1                               100                     姓名                             马志远
              2                               100                     性别                             男
              3                               100                     年龄                             19

              4                               101                     姓名                             李志
              5                               101                     性别                             男
              6                               101                     年龄                             21

              7                               102                     姓名                             王强
              8                               102                     性别                             男
              9                               102                     年龄                             20                


请问我如何把上面的数据以表格的形式一行行显示出来.如下:


          姓名                                     性别                                       年龄


          ...                                       ...                                         ...


[解决办法]
没见过这样设计数据库的。
[解决办法]
用程序来实现方便点

DataTable dt = new ..

DataColumn col = new ..

dt.Columns.Add(col);

取数据加进来
[解决办法]
晕用Asp更好办。用程序写出就得了呗。
[解决办法]
那你还来.net 区
[解决办法]
select code from table
select * from table where code = ?
if not rs.eof then
rs( "姓名 ")
rs( ".. ");
end if
[解决办法]
--测试数据
declare @tb1 table(id varchar(20),code varchar(20),ClassName varchar(20),ClassValue varchar(20))
insert @tb1 values( '1 ', '1001 ', '姓名 ', '马志远 ')
insert @tb1 values( '2 ', '1001 ', '性别 ', '男 ')
insert @tb1 values( '3 ', '1001 ', '年龄 ', '19 ')
insert @tb1 values( '4 ', '1002 ', '姓名 ', '李志 ')
insert @tb1 values( '5 ', '1002 ', '性别 ', '男 ')
insert @tb1 values( '6 ', '1002 ', '年龄 ', '21 ')

select distinct (select ClassValue from @tb1 where code = A.code and ClassName = '姓名 ') as 姓名,
(select ClassValue from @tb1 where code = A.code and ClassName = '性别 ') as 性别,
(select ClassValue from @tb1 where code = A.code and ClassName = '年龄 ') as 年龄
from @tb1 A

---测试结果
李志男21
马志远男19
[解决办法]
--如果你的ClassName固定只有這三種,就很簡單


Select
Max(Case ClassName When N '姓名 ' Then ClassValue Else ' ' End) As 姓名,
Max(Case ClassName When N '性别 ' Then ClassValue Else ' ' End) As 性别,
Max(Case ClassName When N '年龄 ' Then ClassValue Else ' ' End) As 年龄
From

Group By
Code

--如果你的ClassName不是固定的,可能還有更多,就必須使用動態SQL語句
[解决办法]
feiyu0805(飞雨)的可以得到結果,但是這裡可以不用子查詢的,子查詢的效率沒有直接group by的效率高。
[解决办法]
访问和更改关系数据 交叉数据报表有时候需要旋转结果以便在水平方向显示列,而在垂直方向显示行。这就是所谓的创建 PivotTable?、创建交叉数据报表或旋转数据。假定有一个表 Pivot,其中每季度占一行。对 Pivot 的 SELECT 操作在垂直方向上列出这些季度:Year Quarter Amount---- ------- ------1990 1 1.11990 2 1.21990 3 1.31990 4 1.41991 1 2.11991 2 2.21991 3 2.31991 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 NorthwindGOCREATE TABLE Pivot( Year SMALLINT, Quarter TINYINT, Amount DECIMAL(2,1) )GOINSERT 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 Q4FROM Northwind.dbo.PivotGROUP BY YearGO该 SELECT 语句还处理其中每个季度占多行的表。GROUP BY 语句将 Pivot 中一年的所有行合并成一行输出。当执行分组操作时,SUM 聚合中的 CASE 函数的应用方式是这样的:将每季度的 Amount 值添加到结果集的适当列中,在其它季度的结果集列中添加 0。如果该 SELECT 语句的结果用作电子表格的输入,那么电子表格将很容易计算每年的合计。当从应用程序使用 SELECT 时,可能更易于增强 SELECT 语句来计算每年的合计。例如:SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotalFROM (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 P1GO带有 CUBE 的 GROUP BY 和带有 ROLLUP 的 GROUP BY 都计算与本例显示相同的信息种类,但格式稍有不同。请参见SELECT?1988-2000 Microsoft Corporation。保留所有权利。


[解决办法]
--如果你的ClassName固定只有三種

--創建測試環境
Create Table 表
(ID Int Identity(1, 1) Primary Key,
Code Char(3),
ClassName Nvarchar(20),
ClassValue Nvarchar(20))
--插入數據
Insert 表 Select '100 ', N '姓名 ', N '马志远 '
Union All Select '100 ', N '性别 ', N '男 '
Union All Select '100 ', N '年龄 ', N '19 '
Union All Select '101 ', N '姓名 ', N '李志 '
Union All Select '101 ', N '性别 ', N '男 '
Union All Select '101 ', N '年龄 ', N '21 '
Union All Select '102 ', N '姓名 ', N '王强 '
Union All Select '102 ', N '性别 ', N '男 '
Union All Select '102 ', N '年龄 ', N '20 '
GO
--測試
Select
Max(Case ClassName When N '姓名 ' Then ClassValue Else ' ' End) As 姓名,
Max(Case ClassName When N '性别 ' Then ClassValue Else ' ' End) As 性别,
Max(Case ClassName When N '年龄 ' Then ClassValue Else ' ' End) As 年龄
From

Group By
Code
GO
--刪除測試環境
Drop Table 表
--結果
/*
姓名性别年龄
马志远男19
李志男21
王强男20
*/


[解决办法]
rs=Server.Create( "ADODB.RecordSet ")
控制 rs一条一条记录寻循环啊。。。

生成你要的表格。
[解决办法]
--准备数据
declare @tab table(
[id] int
,code int
,classname nvarchar(10)
,classvalue nvarchar(10)
)


insert into @tab
select 1, 100, '姓名 ', '马志远 '
union all select 2, 100, '性别 ', '男 '
union all select 3, 100, '年龄 ', '19 '
union all select 4, 101, '姓名 ', '李志 '
union all select 5, 101, '性别 ', '男 '
union all select 6, 101, '年龄 ', '21 '
union all select 7, 102, '姓名 ', '王强 '
union all select 8, 102, '性别 ', '男 '
union all select 9, 102, '年龄 ', '20 '


--原始表
select * from @tab

--查询
select distinct a.code
,b.classvalue as '姓名 '
,c.classvalue as '性别 '
,d.classvalue as '年龄 '
from @tab a
left outer join @tab b on b.classname= '姓名 ' and a.code=b.code
left outer join @tab c on c.classname= '性别 ' and a.code=c.code
left outer join @tab d on d.classname= '年龄 ' and a.code=d.code


===结果
100马志远男19
101李志男21
102王强男20

[解决办法]
--如果你的ClassName不是固定的
--使用動態SQL語句,創建存儲過程實現
--創建存儲過程
Create ProceDure SP_TEST
As
Begin
Declare @S Nvarchar(4000)
Select @S = ' '
Select @S = @S + ', Max(Case ClassName When N ' ' ' + ClassName + ' ' ' Then ClassValue Else ' ' ' ' End) As [ ' + ClassName + '] '
From 表 Group By ClassName Order By Min(ID)
Select @S = ' Select ' + Stuff(@S, 1, 1, ' ') + N ' From 表 Group By Code '
EXEC(@S)
End
GO
--調用
EXEC SP_TEST
------解决方案--------------------


--如果你的ClassName不是固定的

--創建測試環境
Create Table 表
(ID Int Identity(1, 1) Primary Key,
Code Char(3),
ClassName Nvarchar(20),
ClassValue Nvarchar(20))
--插入數據
Insert 表 Select '100 ', N '姓名 ', N '马志远 '
Union All Select '100 ', N '性别 ', N '男 '
Union All Select '100 ', N '年龄 ', N '19 '
Union All Select '101 ', N '姓名 ', N '李志 '
Union All Select '101 ', N '性别 ', N '男 '
Union All Select '101 ', N '年龄 ', N '21 '
Union All Select '102 ', N '姓名 ', N '王强 '
Union All Select '102 ', N '性别 ', N '男 '
Union All Select '102 ', N '年龄 ', N '20 '
GO
--使用動態SQL語句,創建存儲過程實現
--創建存儲過程
Create ProceDure SP_TEST
As
Begin
Declare @S Nvarchar(4000)
Select @S = ' '
Select @S = @S + ', Max(Case ClassName When N ' ' ' + ClassName + ' ' ' Then ClassValue Else ' ' ' ' End) As [ ' + ClassName + '] '
From 表 Group By ClassName Order By Min(ID)
Select @S = ' Select ' + Stuff(@S, 1, 1, ' ') + N ' From 表 Group By Code '
EXEC(@S)
End
GO
--測試
EXEC SP_TEST
GO
--刪除測試環境
Drop Table 表
Drop ProceDure SP_TEST
--結果
/*
姓名性别年龄
马志远男19
李志男21
王强男20
*/

[解决办法]
Access 有个交叉表,用交叉表就行了


[解决办法]
暈,我還以為是MS SQL。

ACCESS的寫法有很大區別,沒有CASE,改用IIF。

另外,ACCESS中有直接轉交叉表的,你試下,或者直接去ACCCESS版問吧。
[解决办法]
select a.classvalue, b.classvalue,c.classvalue
from
(select * from table_name where classname= '姓名 ') a,
(select * from table_name where classname= '性别 ') b,
(select * from table_name where classname= '年龄 ') c
where a.code=b.code and b.code=.code;
[解决办法]
我的意思是说,SQL语句应怎么写

晕了,我忘了.我是用ASP写的

忘了说了.我的数据库是Access的,

=================
1。
LZ 好好强啊,问题豆不会说清楚,比较健忘~

2。
ASP + Access 偶也全部忘光光了

2。
参考:
.net 动态交叉表
http://www.cnblogs.com/Jinglecat/archive/2007/05/24/757919.html



[解决办法]
ASP的话,自己循环生成表格就行了,不用这么麻烦的SQL语句
[解决办法]
在程序里面调下吧!!!

热点排行