(不会的也顶一下,关注也行,会的不想答的也顶一下)小弟 在此地谢谢了。。就还有82分了。"Persons" 表:
编号      LastName      FirstName        Address          City 
001       Hansen        Ola              Timoteivn 10     Sandnes 
002       Svendson      Tove             Borgvn 23        Sandnes 
003       Pettersen     Kari             Storgt 20        Stavanger "Orders"表:
编号      Company      OrderNumber 
001       Sega         3412 
001       W3School     2312 
001       Trio         4678 
002       W3School     6798 
问题一:
我用   select * from Persons  where LastName='Hansen' 
结果是:
编号      LastName      FirstName        Address          City 
001       Hansen        Ola              Timoteivn 10     Sandnes 
如果我想得到 下面一样的结果:编号      LastName      FirstName        Address          City 
001       Hansen        Ola              Timoteivn 10     Sandnes
001       Hansen        Ola              Timoteivn 10     Sandnes 
001       Hansen        Ola              Timoteivn 10     Sandnes 
001       Hansen        Ola              Timoteivn 10     Sandnes 
该用什么SQL语句,谢谢。问题二:
我们看这二个表,不难发现,Persons和Orders表是一对多的关系
那么我想用SQL语句等到下面的结果,请问该如何写SQL语句编号   Company                 OrderNumber 
001    Sega,W3School,Trio    3412,2312,4678
002    W3School                6798
003     

解决方案 »

  1.   

    第一个问题:
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen'
    第二个问题:
    用游标
      

  2.   

    那是因为我在做打印报表的时候。。先从数据库里面查了而条记录来。现在在TEXTBOX控件里面。再把他传到水晶报表里面去。打印那么样样打印的话。只能打印一页。除非你在打印机上面选。后来我就说用DATASET 作为报表的数据源,但是select * from Persons  where LastName='Hansen' ,只是查了一条记录出来。我做了个TEXTBOX给用户输入的,他想输入多少,就要打印多少。所以用了上面的方法。。
    不过后来我换了个思路,用DATATABLE,来存取所有的值。把问题解决了。当时就是因为上面的那个卡住了 。。才换了思路的。
      

  3.   

    问题1 , 硬要用在 sql 中实现, fachun 的 UNION ALL 是方向之一动态点的,
      就是 
           a. WHILE 循环构造 sql 语句,连接多个 UNION ALL 了, 但是 sql 语句的长度有限制       b. WHILE 循环插入表变量/临时表, 然后查询表变量/临时表最佳方式,当然是在应用程序中 while/for 了,复制数据不就得了,一摸一样的数据,有必要从数据库 select N t条出来迈?浪费内存,浪费 CPU ...
      

  4.   

    问题2 见SQL Server 中多行多列连接成为单行单列 
    http://www.cnblogs.com/Jinglecat/archive/2007/07/11/813387.html
      

  5.   

    问题1:
        我的想法是:建一个临时表#temp,写while循环将select出来的插入到临时表。待循环结束后,在select * from #temp 就好了。问题2:
        不会,学习中
      

  6.   

    问题一:
    在前台处理好于在SQL中处理。
    数据填充在dataSet1中,然后
    for (int i=0;i<n;i++)
    {
        dataSet2.Merge(dataSet1.Tables[0],true,MissingSchemaAction.Add);
    }
    问题二:
    如果用的oracle数据库则下面的文章可以解决这个问题
    http://blog.csdn.net/WWWFIND/archive/2006/09/24/1271807.aspx如果是利用水晶报表的显示数据,可以尝试在水晶报表利用分组处理。
      

  7.   

    问题一
    select * from Persons  where LastName='Hansen' 
    union
    select * from Persons  where LastName='Hansen' 
    union
    select * from Persons  where LastName='Hansen' 
    union
    select * from Persons  where LastName='Hansen'
    问题二
    也想知道。学习中。
      

  8.   

    software_developer() ( ) 信誉:100  2007-8-3 23:49:52  得分: 0  
     
     
       
    问题一
    select * from Persons  where LastName='Hansen' 
    union
    select * from Persons  where LastName='Hansen' 
    union
    select * from Persons  where LastName='Hansen' 
    union
    select * from Persons  where LastName='Hansen'
    问题二
    也想知道。学习中。  
     
    -------------用union可以實現嗎?提醒以下,union會合併重復,union all不會合併重復问题一
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 问题二MS SQL2000中使用函數實現
      

  9.   

    --問題二
    --創建函數
    Create Function F_Get_Orders(@编号 Char(3), @Flag Bit)
    Returns Varchar(8000)
    As
    Begin
    Declare @S Varchar(8000)
    Select @S = ''
    If(@Flag = 0)
    Select @S = @S + ',' + Company From Orders Where 编号 = @编号
    Else
    Select @S = @S + ',' + Cast(OrderNumber As Varchar(100)) From Orders Where 编号 = @编号
    Select @S = Stuff(@S, 1, 1, '')
    Return @S
    End
    GO
    --調用
    Select 编号, dbo.F_Get_Orders(编号, 0) As Company, dbo.F_Get_Orders(编号, 1) As OrderNumber From Persons
    GO
      

  10.   

    --創建測試環境
    Create Table Persons
    (编号 Char(3),
     LastName Varchar(20),
     FirstName Varchar(20),
     Address Varchar(20),
     City Varchar(20))
    Insert Persons Select '001',       'Hansen',         'Ola',               'Timoteivn 10',     'Sandnes' 
    Union All Select '002',       'Svendson',      'Tove',            'Borgvn 23',         'Sandnes' 
    Union All Select '003',       'Pettersen',       'Kari',             'Storgt 20',            'Stavanger'Create Table Orders
    (编号 Char(3),
     Company Varchar(20),
     OrderNumber Int)
    Insert Orders Select '001',       'Sega',             3412 
    Union All Select '001',       'W3School',     2312 
    Union All Select '001',       'Trio',              4678 
    Union All Select '002',       'W3School',     6798 
    GO
    --測試
    --问题一
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen'
    GO--問題二
    --創建函數
    Create Function F_Get_Orders(@编号 Char(3), @Flag Bit)
    Returns Varchar(8000)
    As
    Begin
    Declare @S Varchar(8000)
    Select @S = ''
    If(@Flag = 0)
    Select @S = @S + ',' + Company From Orders Where 编号 = @编号
    Else
    Select @S = @S + ',' + Cast(OrderNumber As Varchar(100)) From Orders Where 编号 = @编号
    Select @S = Stuff(@S, 1, 1, '')
    Return @S
    End
    GO
    --調用
    Select 编号, dbo.F_Get_Orders(编号, 0) As Company, dbo.F_Get_Orders(编号, 1) As OrderNumber From Persons
    GO
    --刪除測試環境
    Drop Table Persons, Orders
    Drop Function F_Get_Orders
    GO
    --結果
    /*
    --问题一結果
    编号 LastName FirstName Address City
    001 Hansen Ola Timoteivn 10 Sandnes
    001 Hansen Ola Timoteivn 10 Sandnes
    001 Hansen Ola Timoteivn 10 Sandnes
    001 Hansen Ola Timoteivn 10 Sandnes--问题二結果
    编号 Company OrderNumber
    001 Sega,W3School,Trio 3412,2312,4678
    002 W3School 6798
    003 NULL NULL
    */
      

  11.   

    问题一:
    select orders.编号,p.lastname,p.firstname,p.address,p.city from orders left join persons p
    on orders.编号 = p.编号 and orders.编号='001'
      

  12.   

    问题补充:
    如果是下面的数据
    "Persons" 表:
    编号      LastName      FirstName        Address          City 
    001       Hansen        Ola              Timoteivn 10     Sandnes 
    002       Svendson      Tove             Borgvn 23        Sandnes 
    003       Pettersen     Kari             Storgt 20        Stavanger "Orders"表:
    编号      Company      OrderNumber 
    001       Sega         2312 
    001       W3School     2312 
    001       Trio         4678 
    002       W3School     6798
    查询的结果是:
    编号   Company                 OrderNumber 
    001    Sega,W3School,Trio    2312,4678
    002    W3School                6798
    003不同的地方是,,当合并的数据相同时候,,只出现一次。
    如:
    001       Sega         2312 
    001       W3School     2312 2312  出现了二次但是查找的结果。
    001    Sega,W3School,Trio    2312,4678的2312 出现一次。。看那位路过的朋友,能解答。(加大了难度哦。)
      

  13.   

    -- 多行多列连接成为单行单列示例:需要一个自定义函数
    -- http://community.csdn.net/Expert/TopicView3.asp?id=5603231if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VertToHorzSample]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[VertToHorzSample]
    GO-- 建立测试数据
    CREATE TABLE VertToHorzSample(
        Column1 int,
        Column2 varchar(100)
    )GOINSERT INTO VertToHorzSample(Column1, Column2)
    SELECT 1, 'A'
    UNION ALL
    SELECT 1, 'B'
    UNION ALL
    SELECT 2, 'C'
    UNION ALL
    SELECT 2, 'D'
    UNION ALL
    SELECT 2, 'E'
    UNION ALL
    SELECT 3, 'F'GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ConvertVertToHorz]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[ConvertVertToHorz]
    GO-- 建立辅助函数
    CREATE FUNCTION ConvertVertToHorz(@Col1Val int)
    RETURNS VARCHAR(8000)
    AS
        BEGIN 
            -- 实际项目中,应该考虑 @RetVal 是否会超过 8000 个字符
            DECLARE @RetVal varchar(8000)
            SET @RetVal = ''
            -- 通过递归 SELECT 连接指定列存储到临时变量中
            SELECT @RetVal = Column2 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val
            -- 连接多列
            -- SELECT @RetVal = Column2 + ',' + Column3 + ',' + Column4 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val
            
            -- 去掉尾巴的 , (逗号)
            IF LEN(@RetVal) > 0
              SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)    
            --PRINT @RetVal
            
            RETURN @RetVal
        ENDGO-- 测试
    SELECT Column1, dbo.ConvertVertToHorz(Column1) Column2 FROM (SELECT DISTINCT Column1 FROM VertToHorzSample) t
    /**//*
    Column1     Column2                                                                 
    ----------- ------------------
    1           A,B
    2           C,D,E
    3           F
    */GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VertToHorzView]') and OBJECTPROPERTY(id, N'IsView') = 1)
    drop view [dbo].[VertToHorzView]
    GO-- 可以建立一个视图
    CREATE VIEW dbo.VertToHorzView
    AS
    SELECT Column1, dbo.ConvertVertToHorz(Column1) Column2
    FROM (SELECT DISTINCT Column1 FROM dbo.VertToHorzSample) tGO-- 测试视图
    SELECT * FROM VertToHorzView
    /**//*
    Column1     Column2s                                                                                                                                                                                                                                                         
    ----------- -----------------
    1           A,B
    2           C,D,E
    3           F
    */
      

  14.   

    zhaoxiaoyang5156() ,稍微修改下函數即可--創建函數
    Create Function F_Get_Orders(@编号 Char(3), @Flag Bit)
    Returns Varchar(8000)
    As
    Begin
    Declare @S Varchar(8000)
    Select @S = ''
    If(@Flag = 0)
    Select @S = @S + ',' + Company From Orders Where 编号 = @编号 Order By OrderNumber
    Else
    Select @S = @S + ',' + Cast(OrderNumber As Varchar(100)) From Orders Where 编号 = @编号 Group By OrderNumber
    Select @S = Stuff(@S, 1, 1, '')
    Return @S
    End
    GO
      

  15.   


    --創建測試環境
    Create Table Persons
    (编号 Char(3),
     LastName Varchar(20),
     FirstName Varchar(20),
     Address Varchar(20),
     City Varchar(20))
    Insert Persons Select '001',       'Hansen',         'Ola',               'Timoteivn 10',     'Sandnes' 
    Union All Select '002',       'Svendson',      'Tove',            'Borgvn 23',         'Sandnes' 
    Union All Select '003',       'Pettersen',       'Kari',             'Storgt 20',            'Stavanger'Create Table Orders
    (编号 Char(3),
     Company Varchar(20),
     OrderNumber Int)
    Insert Orders Select '001',       'Sega',             2312 
    Union All Select '001',       'W3School',     2312 
    Union All Select '001',       'Trio',              4678 
    Union All Select '002',       'W3School',     6798 
    GO
    --測試
    --问题一
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen' 
    union all
    select * from Persons  where LastName='Hansen'
    GO--問題二
    --創建函數
    Create Function F_Get_Orders(@编号 Char(3), @Flag Bit)
    Returns Varchar(8000)
    As
    Begin
    Declare @S Varchar(8000)
    Select @S = ''
    If(@Flag = 0)
    Select @S = @S + ',' + Company From Orders Where 编号 = @编号 Order By OrderNumber
    Else
    Select @S = @S + ',' + Cast(OrderNumber As Varchar(100)) From Orders Where 编号 = @编号 Group By OrderNumber
    Select @S = Stuff(@S, 1, 1, '')
    Return @S
    End
    GO
    --調用
    Select 编号, dbo.F_Get_Orders(编号, 0) As Company, dbo.F_Get_Orders(编号, 1) As OrderNumber From Persons
    GO
    --刪除測試環境
    Drop Table Persons, Orders
    Drop Function F_Get_Orders
    GO
    --結果
    /*
    --问题一結果
    编号 LastName FirstName Address City
    001 Hansen Ola Timoteivn 10 Sandnes
    001 Hansen Ola Timoteivn 10 Sandnes
    001 Hansen Ola Timoteivn 10 Sandnes
    001 Hansen Ola Timoteivn 10 Sandnes--问题二結果
    编号 CompanyOrder Number
    001 Sega,W3School,Trio 2312,4678
    002 W3School 6798
    003 NULL NULL
    */
      

  16.   

    --测试环境同 paoluo(一天到晚游泳的鱼) ( ) 信誉:100 
    --问题1
    select top 4 a.*
    from Persons a,syscolumns b 
    where a.LastName='Hansen' --问题2
    --同 paoluo(一天到晚游泳的鱼) ( ) 信誉:100 
      

  17.   

    paoluo(一天到晚游泳的鱼) 
    請到http://community.csdn.net/Expert/TopicView.asp?id=5693352
    接分
      

  18.   

    朋友:juntor()
    可惜你的只能查最多574 條 出來。。不能查大于574 的出來啊當然這個已夠好了。
      

  19.   

    数据条数要增多很容易的啊.
    你在From 后面再加一个,syscolumns c就可以了.select top 4 a.*
    from Persons a,syscolumns b,syscolumns c
    where a.LastName='Hansen' 这其实是交叉联接.求的是笛卡尔积的.
    你只能查出最多574条记录,说明你的syscolumns表只有574行记录.
    在语句中再加一个,syscolumns c的结果是你可以查出最多574*574=329476条记录
    够多了吧.呵呵