表A
ID     name
1      A
2      C
3      D今天是2006-6-5
求输出以下列表
2006-6-5      A             C           D
10:00
10:30
11:00
11:30
12:00
12:30
13:00
...
22:00

解决方案 »

  1.   

    to selectplayer() 
    一个结果集就行
      

  2.   

    to LouisXIV()
    差不多就是这个意思
      

  3.   

    --Name不固定,用動態SQL語句
    Create Table A(ID Int,Name Varchar(10))
    Insert A Select 1,'A'
    Union All Select 2,'C'
    Union All Select 3,'D'
    GO
    Declare @S Varchar(8000)
    Select @S='SELECT Top 50 ID = Identity(Int,0,1) Into # From Syscolumns; Select Convert(Varchar(5),DateAdd(mi,30*ID,Convert(Varchar(11),GetDate(),120)+''10:00''),108) As ['+Convert(Varchar(10),GetDate(),120)+']'
    Select @S=@S+','''' As '+Name From A Order By Name
    Select @S=@S+' From # Where ID<=24; Drop Table #'
    EXEC(@S)
    GO
    Drop Table A
    --Result
    /*
    2006-06-05 A C D
    10:00
    10:30
    11:00
    11:30
    12:00
    12:30
    13:00
    13:30
    14:00
    14:30
    15:00
    15:30
    16:00
    16:30
    17:00
    17:30
    18:00
    18:30
    19:00
    19:30
    20:00
    20:30
    21:00
    21:30
    22:00
    */
      

  4.   

    to paoluo(一天到晚游泳的鱼)
    我试试
      

  5.   

    Create table A(id int identity(1,1),name char(1))
    insert A select 'A'
    union all select 'B'
    union all select 'C'declare @s varchar(8000),@hour int,@min int
    select @s='',@hour=10,@min=0
    while @hour<=22
    begin
    set @min=0while @min<=30
    begin
    set @s=@s+' union all select '''+convert(varchar,@hour)+':'+right('0'+convert(varchar,@min),2)+''' ['+convert(varchar(10),getdate(),120)+'] '
    select @s=@s+',null ['+name+']' from A
    select @min=(case when @min=0 then 30 when @min=30 then 31 end)
    endset @hour=@hour+1
    end
    set @s=stuff(@s,1,11,'')
    exec (@s)
    drop table A/*
    2006-06-05 A           B           C           
    ---------- ----------- ----------- ----------- 
    10:00      NULL        NULL        NULL
    10:30      NULL        NULL        NULL
    11:00      NULL        NULL        NULL
    11:30      NULL        NULL        NULL
    12:00      NULL        NULL        NULL
    12:30      NULL        NULL        NULL
    13:00      NULL        NULL        NULL
    13:30      NULL        NULL        NULL
    14:00      NULL        NULL        NULL
    14:30      NULL        NULL        NULL
    15:00      NULL        NULL        NULL
    15:30      NULL        NULL        NULL
    16:00      NULL        NULL        NULL
    16:30      NULL        NULL        NULL
    17:00      NULL        NULL        NULL
    17:30      NULL        NULL        NULL
    18:00      NULL        NULL        NULL
    18:30      NULL        NULL        NULL
    19:00      NULL        NULL        NULL
    19:30      NULL        NULL        NULL
    20:00      NULL        NULL        NULL
    20:30      NULL        NULL        NULL
    21:00      NULL        NULL        NULL
    21:30      NULL        NULL        NULL
    22:00      NULL        NULL        NULL
    22:30      NULL        NULL        NULL
    */
      

  6.   

    if exists(select * from sysobjects where name='Tb') drop table tb
    if exists(select * from sysobjects where name='temp') drop table temp
    GO
    --生成测试用表数据
    create table Tb(ID int,NAME varchar(20))
    insert into Tb select 1,'A'
    union all select 2,'C'
    union all select 3,'D'
    GO
    -- 得到一个空表结构 */
    Declare @Sql varchar(8000)
    set @sql='select 时间段=''     '''
    select @sql=@sql +','+name+'=max(case NAME when '''+NAME+''' then '' '' else '' '' end)' from Tb group by name
    exec (@sql+' into temp from Tb where 1>2 group by id')
    --select * from  temp
    GO-- 插入10~22点的值 
    Declare @Dt datetime
    Declare @strT varchar(8000)
    set @dt='2006-06-05 10:00:00'
    while @Dt<='2006-06-05 22:00:00'
    BEGIN
    set @strT='insert into temp(时间段) values('''+convert(varchar(5),@dt,8)+''')'
    --select @strT
    exec (@strT)
    set @Dt=dateadd(mi,30,@Dt)
    END
    select * from Temp--删除临时数据
    GO
    drop table Tb,temp
      

  7.   

    /* 结果为  */时间段   A    C    D    
    ----- ---- ---- ---- 
    10:00 NULL NULL NULL
    10:30 NULL NULL NULL
    11:00 NULL NULL NULL
    11:30 NULL NULL NULL
    12:00 NULL NULL NULL
    12:30 NULL NULL NULL
    13:00 NULL NULL NULL
    13:30 NULL NULL NULL
    14:00 NULL NULL NULL
    14:30 NULL NULL NULL
    15:00 NULL NULL NULL
    15:30 NULL NULL NULL
    16:00 NULL NULL NULL
    16:30 NULL NULL NULL
    17:00 NULL NULL NULL
    17:30 NULL NULL NULL
    18:00 NULL NULL NULL
    18:30 NULL NULL NULL
    19:00 NULL NULL NULL
    19:30 NULL NULL NULL
    20:00 NULL NULL NULL
    20:30 NULL NULL NULL
    21:00 NULL NULL NULL
    21:30 NULL NULL NULL
    22:00 NULL NULL NULL(所影响的行数为 25 行)
      

  8.   

    paoluo(一天到晚游泳的鱼)
    ---------------------------
    高手
      

  9.   

    paoluo(一天到晚游泳的鱼):一个小问题
    你漏了一个空格
    Create Table A(IDInt,Name Varchar(10))
    -----------------^
      

  10.   

    刚才打错了,是ID 和 Int中间有个空格没别的意思,怕别人直接拷贝代码执行,出错佩服,这段代码给我看我都看不懂
      

  11.   

    沒有漏空格,是CSDN將空格過濾產生的問題,不然我的語句怎麼可以通過測試呢??
      

  12.   

    CSDN會將他認為是多余的空格、Tab過濾掉,所以代碼經常出現這種問題。
      

  13.   

    游鱼的方法还有待完善.
    因为他的动态sql语句中,竟然手动将表A中的name列的值加进去。
    表A的数据是不确定的,
    所以,像dutguoyi(新鲜鱼排)那样通过循环将表A中的name列的值加进去,这种方法更好。
    而且,我想这个效率根本差不了多少哦。但是dutguoyi(新鲜鱼排)方法也有一个致命伤, 因为我们知道动态SQL语句中,语句的长度是有约定的。
    如果长度超过8,000,则会被截断,从而导致问题。总的来说,我反但比较看好wwh999(印钞机的卖 V2.0...发梦ing)的方法。
    先创建一个临时表,然后向表中逐条记录的插入。
    而且,我想在楼主的应用环境中,性能一定能满足要求
      

  14.   

    filebat(Mark) ( ) 信誉:100  2006-06-06 13:15:00  得分: 0  
     
     
       游鱼的方法还有待完善.
    因为他的动态sql语句中,竟然手动将表A中的name列的值加进去。
    表A的数据是不确定的,
    所以,像dutguoyi(新鲜鱼排)那样通过循环将表A中的name列的值加进去,这种方法更好。
    而且,我想这个效率根本差不了多少哦。------------------------------------------------------------------我手動加了name列的值??再看看我的語句??如果是手動加進去,我有必要用動態語句嗎??因為這個循環比較小,可能效率上相差不多,但是數據稍微大點,就有差距了。
      

  15.   

    嗯, 游鱼,你又看了一下你的代码。
    “Select @S=@S+','''' As '+Name From A Order By Name”
    你不是手动加入的,是我看错了。不过,我仍然认为wwh999的方法不错。(如果我要用的话,我还是会用他的方法。:-), 个人喜好问题)因为以前,遇到过几次动态SQL语句不够长的情况。
    如果这个应用中不存在这个问题, 那当然是你的办法更佳了。见笑,班门弄斧了。(游鱼, 英勇不减当年哦。结贴也来看看, 8错8错, 向你学习)
      

  16.   

    結貼還來看貼,是一種習慣了。很多人,結了貼之後才發現,還有問題,所以有時候會幫忙再答下。我現在不上QQ了,不然可以直接在QQ上和你交流了。