表1 
id    name1    name2 
0      aaa      bbb 
1      ccc      ddd 
2      eee      fff 表2 
group    id1    id2    id3 
 1400     0      1      2 
 1500     1      2 
 1600     0 要求输出表 
表3 
group    names 
 1400     aaa bbb/ccc ddd/eee fff 
 1500     ccc ddd/eee fff 
 1600     aaa bbb 
请教这样的视图应该怎样写?

解决方案 »

  1.   

    -- 示例数据
    DECLARE @表1 TABLE(
    id int, name1 varchar(10), name2 varchar(10))
    INSERT @表1
    SELECT 0, 'aaa', 'bbb' UNION ALL
    SELECT 1, 'ccc', 'ddd' UNION ALL
    SELECT 2, 'eee', 'fff'DECLARE @表2 TABLE(
    [group] int, id1 int, id2 int, id3 int)
    INSERT @表2
    SELECT 1400, 0, 1, 2 UNION ALL
    SELECT 1500, 1, 2, NULL UNION ALL
    SELECT 1600, 0, NULL, NULL-- 查询
    SELECT
    A.[group],
    names = ISNULL(B1.name1 + ' ' + B1.name2, '')
    + ISNULL('/' + B2.name1 + ' ' + B2.name2, '')
    + ISNULL('/' + B3.name1 + ' ' + B3.name2, '')
    FROM @表2 A
    LEFT JOIN @表1 B1
    ON A.id1 = B1.id 
    LEFT JOIN @表1 B2
    ON A.id2 = B2.id 
    LEFT JOIN @表1 B3
    ON A.id3 = B3.id 
      

  2.   

    示例结果group       names
    ----------- ----------------------------
    1400        aaa bbb/ccc ddd/eee fff
    1500        ccc ddd/eee fff
    1600        aaa bbb(3 行受影响)
      

  3.   

    请问B1,B2,B3是什么?
    如果表1中的数据一直增加,那查询中的B1是不是也要一直增加?
    这样是不是有些问题?
      

  4.   

    A/B1/B2/B3 是为表指定的别名, 起到简化引用的作用@表1/@表2 是表变量, 在实际使用时, 应该替换为你的描述中的表1/表2的名称
      

  5.   

    示例注释下的东西是为了测试查询语句定义的测试数据(使用表变量)查询部分才是实际使用到的查询关于语法什么的, 建议楼主看看 sql server 的联机帮助