2

I have two table like

id   Name    allocation
2    Ash      15
3    Alam     18
4    Rifat    20

and

Date   Id    Present
24     2     10
24     3     15
25     2     10
25     3     12
25     4     12

Now i want to get the following result

     Date  Id Alloc   Present
      24   2   15     10        
      24   3   18     15
      24   4   20     NULL
      25   2   15     10
      25   3   18     12
      25   4   20     12

I've tried JOIN query but it does not give desired result How to get the above result?

4

2 回答 2

4
SELECT 
    t1.id
  , dd.date
  , t1.allocation
  , t2.present 
FROM 
    table1 AS t1                         --- all items
  CROSS JOIN
    ( SELECT DISTINCT date
      FROM table2
    ) AS dd                              --- all dates
  LEFT JOIN
    table2 AS t2                         --- present allocations
      ON  t2.id = t1.id
      AND t2.date = dd.date ;

在 SQL-Fiddle 测试:测试(谢谢@JW。)

于 2013-01-26T14:52:32.067 回答
0

还有一种有趣的方式:

SELECT 
    t2.date,
    t1.id,
    t1.allocation,
    MAX(CASE WHEN t1.id = t2.id THEN t2.Present ELSE NULL END)
FROM 
    table1 t1, table2 t2
GROUP BY 
    t1.id, t2.date, t1.allocation
ORDER BY 
    t2.date, t1.id

窃取自:具有 0 个值的 SQL 查询内部联接

http://www.sqlfiddle.com/#!3/d2ded/44

于 2013-01-26T17:49:54.883 回答