这样的结果用SQL语句如何写? ( 积分: 100 )

  • 主题发起人 主题发起人 kukow
  • 开始时间 开始时间
K

kukow

Unregistered / Unconfirmed
GUEST, unregistred user!
表:ID,Field1,Field2,Field3,Field4,Field5<br>记录:1,001,'张三','00000001','2007-09-09&nbsp;10:23:24',01<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2,001,'张三','00000001','2007-09-09&nbsp;14:10:34',01<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,001,'张三','00000001','2007-09-09&nbsp;19:29:34',01<br><br>写一查询语句查询出这样的结果:<br>&nbsp;&nbsp;&nbsp;&nbsp;Field1,FIeld2,Field3,DT,1,2,3<br>&nbsp;&nbsp;&nbsp;&nbsp;001,张三,00000001,2007-09-09,10:23:24,14:10:34,19:29:34<br><br>如何写这SQL语句呢?高手请指教;
 
这是一个多值列的行列转换问题,因为记录不定,所以应该自动生成sql,然后查询执行查询,如果需要多个人一块查询,那需要把后面的部分作为一个字段处理
 
to:&nbsp;wang0801<br>能否给个源码的例子?
 
不多的話,可以用case&nbsp;語句生成<br>要不就用交叉表了,複雜一點
 
我用SQL写不来.不过我能在DBGRID那晕显示这样的效果.你是在哪里显示这样的效果呢.
 
可以在存储过程中用游标完成该功能!
 
select&nbsp;a.id,a.field1,a.field2,a.field4,b.field4,c.field4&nbsp;from&nbsp;table1&nbsp;as&nbsp;a&nbsp;left&nbsp;join&nbsp;table1&nbsp;as&nbsp;b&nbsp;on&nbsp;a.field4=b.field4&nbsp;left&nbsp;join&nbsp;table1&nbsp;as&nbsp;c&nbsp;on&nbsp;a.field4=c.field4
 
select&nbsp;a.id,a.field1,a.field2,a.filed4,b.filed4,c.filed4&nbsp;<br>from&nbsp;表&nbsp;as&nbsp;a&nbsp;left&nbsp;join&nbsp;表&nbsp;as&nbsp;b&nbsp;on&nbsp;a.field1=b.field1&nbsp;and&nbsp;a.filed4&nbsp;&lt;&nbsp;b.filed4<br>left&nbsp;join&nbsp;表&nbsp;as&nbsp;c&nbsp;on&nbsp;a.field1=c.field1&nbsp;and&nbsp;b.filed4&nbsp;&lt;&nbsp;c.filed4
 
to&nbsp;:wang0801<br>&nbsp;&nbsp;我想你一定知道怎么做,给个具体的例子好吗?在线等待!正如你所说(这是一个多值列的行列转换问题,因为记录不定,所以应该自动生成sql,然后查询执行查询,如果需要多个人一块查询,那需要把后面的部分作为一个字段处理).知道的朋友也可以帮个忙!
 
帮你顶一个,接个分
 
你的Field1,FIeld2,Field3,DT,1,2,3&nbsp;后面也许会有4,5吧.不定是吗?楼上的几个都是错的.测试过.我想先把日期和时间分离出来写到个临时表.在做个存储过程把列变成行因该不难.<br>具体的没写.<br>select&nbsp;field1,field2,field3,convert(char(10),field4,120)&nbsp;as&nbsp;DT,<br>convert(char(8),field4,108)&nbsp;<br>from&nbsp;b&nbsp;group&nbsp;by&nbsp;field1,field2,field3,convert(char(10),field4,120),convert(char(8),field4,108)&nbsp;时间和日期分开.储存过程自己想下.也可以顶好最多有几个.就是你那的1,2,3,...等.这样更好做.
 
写一个字符串相加的函数就可以解决了.<br><br>--------<br>Create&nbsp;function&nbsp;getZH(@ZD&nbsp;varchar(10))&nbsp;returns&nbsp;varchar(1000)<br>as<br>begin<br>&nbsp;&nbsp;declare&nbsp;@str&nbsp;varchar(1000)<br>&nbsp;&nbsp;set&nbsp;@str=''<br>&nbsp;&nbsp;select&nbsp;@str=@str+&nbsp;Field5&nbsp;from&nbsp;表名&nbsp;where&nbsp;[Field1]&nbsp;=&nbsp;@ZD<br>&nbsp;&nbsp;return(@str)<br>End<br>---------调用函数<br>select&nbsp;Field1,Field2,Field3,&nbsp;dbo.getZH(Field1)&nbsp;as&nbsp;T&nbsp;from&nbsp;表名&nbsp;group&nbsp;by&nbsp;Field1,Field2,Field3
 
建议使用存储过程<br>这个问题就是竖表转横表.
 
挂了这么几天了,怎么没人回答我啊?高手些个呢?
 
MS有点复杂一样的<br>顶上去继续
 
帮你顶,接个分
 
你想要多列还是把时间作为一个字段处理<br>如果把时间作为一个字段处理discovered&nbsp;的不行吗?
 
一个列不定的交叉数据报表难道这里就没有人知道吗?高手越来越不爱来DFW了
 
給分啦!!!就是交叉表而已。<br>select&nbsp;a.id,a.Field1,a.Field2,a.Field4,b.Field4,c.Field4&nbsp;<br>from&nbsp;表&nbsp;as&nbsp;a&nbsp;left&nbsp;join&nbsp;表&nbsp;as&nbsp;b&nbsp;on&nbsp;a.Field1=b.Field1&nbsp;and&nbsp;a.Field4&nbsp;&lt;&nbsp;b.Field4<br>left&nbsp;join&nbsp;表&nbsp;as&nbsp;c&nbsp;on&nbsp;a.Field1=c.Field1&nbsp;and&nbsp;b.Field4&nbsp;&lt;&nbsp;c.Field4<br>where&nbsp;not&nbsp;(c.Field4&nbsp;is&nbsp;null)[:D]
 
后退
顶部