有一表aa,其结构与数据如下: 
code    welder        line_no         spec 
  1      NC3           P101           δ:9.5 
  2      NC3/NA3       P101           δ:9.5 
  3      NC3/NA3       P101           δ:9.5 
  4      NC3           P101           δ:9.5 
  5      NA3           P101           δ:9.5 
现在需要按welder,line_no,spec分组显示各自所包函了哪些code,其效果如下所示: P101   NA3         δ:9.5         5 
P101   NC3         δ:9.5         1,4 
P101   NC3/NA3     δ:9.5         2,3 
试问:这个的交叉表是否可写,又如何写?在线跪求各大虾帮忙. 
 

解决方案 »

  1.   


    CREATE TABLE t
    (
    code int,
    welder nvarchar(50),
    line_no nvarchar(50),
    spec   nvarchar(50)
    )
    insert into t 
     select  1,'NC3','P101','δ:9.5'
    union all select 2,'NC3/NA3','P101','δ:9.5'
    UNION ALL select 3,'NC3/NA3','P101','δ:9.5'
    union all select 4,'NC3','P101','δ:9.5'   
    union all select  5,'NA3','P101','δ:9.5'   
    --函數
    create function dbo.f_a(@a varchar(10))
    returns varchar(1000)
    as 
    begin
    declare @s varchar(1000)
    set @s=''
    select @s=@s+CAST(code as nvarchar(10))+',' from t where welder=@a
    return (left(@s,len(@s)-1))
    endselect welder,line_no,spec,code=dbo.f_a(welder) from t GROUP BY welder,line_no,spec
    --测试数据
    NA3 P101 δ:9.5 5
    NC3 P101 δ:9.5 1,4
    NC3/NA3 P101 δ:9.5 2,3--删除测试
    drop function dbo.f_a
    drop table t
      

  2.   

    --SQLSERVER中建立表
    CREATE TABLE Test
    (
     code int,
     welder varchar(30),
     line_no varchar(30),
     spec varchar(30)
    )INSERT INTO Test
    SELECT 1,'NC3','P101','δ:9.5' UNION ALL
    SELECT 2,'NC3/NA3','P101','δ:9.5' UNION ALL
    SELECT 3,'NC3/NA3','P101','δ:9.5' UNION ALL
    SELECT 4,'NC3','P101','δ:9.5' UNION ALL
    SELECT 5,'NA3','P101','δ:9.5' GO--SQLSERVER中建立合并函数
    CREATE FUNCTION SplitColumn( @welder varchar(30), @line_no varchar(30),@spec varchar(30) )
    RETURNS VARCHAR(2000)
    AS
    BEGIN
       DECLARE @re VARCHAR(2000)
       SET @re = ''
       SELECT @re = @re+','+CAST( CODE AS VARCHAR)
        FROM Test WHERE welder = @welder AND line_no = @line_no AND spec = @spec
       RETURN ( STUFF(@re,1,1,'') )
    END
    GO--这是执行的SQL语句,可以直接用ADOQuery,或者其他的DataSet执行调用
    SELECT line_no, welder, spec, dbo.SplitColumn(welder,line_no,spec) AS spec
    FROM Test GROUP BY welder,line_no,specDROP FUNCTION SplitColumn
    DROP TABLE Test--结果数据
    line_no                        welder                         spec                          spec 
    P101                           NA3                            δ:9.5                          5
    P101                           NC3                            δ:9.5                          1,4
    P101                           NC3/NA3                        δ:9.5                          2,3--DELPHI里的方法我就不再写了!good luck!