A(账号,姓名,金额)
B(账号,摘要,日期,操作员)
B表的摘要包括这样的信息:开户。销户。支取。存款等
现在我要选出这样的数据
应该怎么弄?账号 姓名 开户日,操作员,销户日,操作员别用UPDATE ,最好只用SELECT 或者选择视图之类的,希望能高效查询的一种方法NOTE:有些人开了户,但是并不代表,都销户了,只是部分人销户了而已
在线等

解决方案 »

  1.   

    左联加case when 就可以了
      

  2.   

    两表连查 行转列
    select
      a.账号,a.姓名,
      max(case b.摘要 when '开户' then b.日期' else '' end) as 开户日,
      max(case b.摘要 when '开户' then b.操作员' else '' end) as 操作员,
      max(case b.摘要 when '销户' then b.日期' else '' end) as 开户日,
      max(case b.摘要 when '销户' then b.操作员' else '' end) as 操作员
    from
      a,b
    where
      a.账号=b.账号
    group by
      a.账号,a.姓名
      

  3.   

    select
      a.账号,a.姓名,
      max(case b.摘要 when '开户' then b.日期 else '' end) as 开户日,
      max(case b.摘要 when '开户' then b.操作员' else '' end) as 操作员,
      max(case b.摘要 when '销户' then b.日期' else '' end) as 开户日,
      max(case b.摘要 when '销户' then b.操作员' else '' end) as 操作员
    from
      a,b
    where
      a.账号=b.账号
    group by
      a.账号,a.姓名
      

  4.   

    select
      a.账号,a.姓名,
      max(case b.摘要 when '开户' then b.日期 else '' end) as 开户日,
      max(case b.摘要 when '开户' then b.操作员 else '' end) as 操作员,
      max(case b.摘要 when '销户' then b.日期 else '' end) as 开户日,
      max(case b.摘要 when '销户' then b.操作员 else '' end) as 操作员
    from
      a,b
    where
      a.账号=b.账号
    group by
      a.账号,a.姓名
      

  5.   


    select a.账号,a.姓名,
    isnull(b.日期,'') 开户日, isnull(b.操作员,'') 操作员A,
    isnull(c.日期,'') 销户日, isnull(c.操作员,'') 操作员B
    from a
    left join (select 账号,日期,操作员 from b where 摘要='开户') b ON a.账号=b.账号
    left join (select 账号,日期,操作员 from b where 摘要='销户') c ON a.账号=c.账号
      

  6.   

    DECLARE @KQ1 TABLE(empName NVARCHAR(32), timeLen INT DEFAULT 0, recDate DATETIME);
    INSERT INTO @KQ1(empName, timeLen, recDate)
    SELECT N'张三', 10, '2010-11-1' UNION ALL
    SELECT N'张三', 10, '2010-11-2' UNION ALL
    SELECT N'张三', 10, '2010-11-3' UNION ALL
    SELECT N'张三', 10, '2010-11-4' UNION ALL
    SELECT N'李四', 10, '2010-11-1' UNION ALL
    SELECT N'李四', 10, '2010-11-2' UNION ALL
    SELECT N'李四', 10, '2010-11-3' UNION ALL
    SELECT N'李四', 10, '2010-11-4' UNION ALL
    SELECT N'李四', 10, '2010-11-5' UNION ALL
    SELECT N'王五', 20, '2010-11-1'--SELECT * FROM @KQ1 DECLARE @date_table TABLE(recDate DATETIME) --存放2010年11月1号-30号
    DECLARE @dt DATETIME,
    @i INTSELECT @dt = '2010-11-1', @i = 0
    WHILE @i < 30
    BEGIN
    INSERT INTO @date_table(recDate)
    VALUES(@dt)

    SELECT @dt = DATEADD(dd, 1, @dt), @i = @i + 1
    END
    --SELECT * FROM @date_table
    --empName, timeLen, recDate
    WITH cte AS(
    SELECT t1.empName, isnull(t2.timeLen,0) timeLen, t1.recDate
    FROM (SELECT DISTINCT a.empName, b.recDate
    FROM @KQ1 a
    CROSS JOIN @date_table b) t1
    LEFT JOIN @KQ1 t2 
    ON t1.empName=t2.empName AND t1.recDate=t2.recDate
    )

    SELECT * FROM cte
    UNION
    SELECT empName, SUM(timeLen) timeLen, NULL
    FROM @KQ1 
    GROUP BY empName 
    ORDER BY empName, recDate
      

  7.   

    那AIX系统不能使用CASE  WHEN语句呢?
      

  8.   


    AIX系统里面能不能使用CASE WHEN ?