1

我有这样的查询(从 myTable 中选择 id、refid、someData):

id reffid someData
8 10 文本1
9 10 文本2
10 11 文本3
11 11 文本4
12 11 文本5
13 11 文本6
14 12 文本7
15 12 文本8
16 12 文本9
17 13 文本10
18 14 文本11

我需要执行以下操作的查询:如果我有少于 4 个具有相同值的 reffid,则添加具有相同 reffid 的行并在 someData 添加 -。结果查询应如下所示:

id reffid someData
8 10 文本1
9 10 文本2
???10 -
???10 -
10 11 文本3
11 11 文本4
12 11 文本5
13 11 文本6
14 12 文本7
15 12 文本8
16 12 文本9
???12 -
17 13 文本10
???13 -
???13 -
???13 -
18 14 文本11
???14 -
???14 -
???14 -

如何做到这一点?

4

1 回答 1

1

尝试

SELECT t.id, l.reffid, COALESCE(t.somedata, '-') someData
  FROM
(
  SELECT reffid, rnum
    FROM
  (
    SELECT DISTINCT reffid
      FROM table1
  ) q CROsS JOIN 
  (
    SELECT 1 rnum UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4
  ) n
) l LEFT JOIN 
(
  SELECT id, reffid, somedata, 
         ROW_NUMBER() OVER (PARTITION BY reffid ORDER BY id) rnum
    FROM table1
) t
   ON l.reffid = t.reffid
  AND l.rnum   = t.rnum

输出:

| 身份证 | 重新购买 | 一些数据 |
|--------|--------|----------|
| 8 | 10 | 文本1 |
| 9 | 10 | 文本2 |
| (空) | 10 | - |
| (空) | 10 | - |
| 10 | 11 | 文本3 |
| 11 | 11 | 文本4 |
| 12 | 11 | 正文5 |
| 13 | 11 | 正文6 |
| 14 | 12 | 正文7 |
| 15 | 12 | 正文8 |
| 16 | 12 | 正文9 |
| (空) | 12 | - |
| 17 | 13 | text10 |
| (空) | 13 | - |
| (空) | 13 | - |
| (空) | 13 | - |
| 18 | 14 | text11 |
| (空) | 14 | - |
| (空) | 14 | - |
| (空) | 14 | - |

这是SQLFiddle演示

于 2013-09-05T07:50:44.377 回答