1

これはサンプルテーブルです:

Table1
| id | one | two | three | four | five | six |
|--------------------------------------------|
|   1|   11|    7|      4|     9|     4|    1|
|   2|   12|    9|      3|     8|    19|   32|
|   3|   18|    7|      7|     1|    24|    2|
|   4|    9|    1|     15|     6|     6|    4|

現在、テーブルで使用しているクエリは次のとおりです。

SELECT id, Max(colx) AS colWithMax
FROM (
   SELECT id, one AS Colx From Table1 UNION ALL
   SELECT id, two AS Colx From Table1 UNION ALL
   SELECT id, three AS Colx From Table1 UNION ALL
   SELECT id, four AS Colx From Table1 UNION ALL
   SELECT id, five AS Colx From Table1 UNION ALL
   SELECT id, six AS Colx From Table1
)
group by id;

私が得ている出力は次のとおりです。

ID | colWithMax
-- | ---------
 1 |     11
 2 |     32
 3 |     24
 4 |     15

私の質問は、クエリを変更して、出力に列の値ではなく列名が表示されるようにするにはどうすればよいですか?

サンプル テーブルに基づいて、目的の出力は次のようになります。

ID | colWithMax
-- | --------- 
 1 |   one
 2 |   six
 3 |   five
 4 |   three

注: 私は sql の基本的な理解があり、ms-access を使用したことがありません。回答はできるだけ具体的にしてください。ありがとうございました。

4

3 に答える 3

0

物事を簡単にするために、これを独自のクエリに少し移動します(好きなように呼び出しますがQry、この回答の目的で呼び出します。ご覧のとおり、値がどこからの列の名前の列を追加しましたか来る。

SELECT id, val, col
FROM (
    SELECT id, one AS val, 'one' AS col FROM Table1 UNION ALL
    SELECT id, two AS val, 'two' AS col FROM Table1 UNION ALL
    SELECT id, three AS val, 'three' AS col FROM Table1 UNION ALL
    SELECT id, four AS val, 'four' AS col FROM Table1 UNION ALL
    SELECT id, five AS val, 'five' AS col FROM Table1 UNION ALL
    SELECT id, six AS val, 'six' AS col FROM Table1
) AS Qry

上記で定義したものを使用する2番目/新しいクエリでは、次のようにします

SELECT q1.id, q1.val, q1.col  AS colWithMax
FROM Qry q1
LEFT JOIN Qry q2 ON q2.id = q1.id
                AND q2.val > q1.val
WHERE q2.id IS NULL

それらよりも大きい数を持たない値のみが結合されるという考えであり、したがって最大 (または最大数) は「結合値」を持つべきではありません。これらはによって識別されますq2.id IS NULL

于 2013-04-09T23:46:00.160 に答える
0

次のクエリを試すことができます-

select id, colname from (   
SELECT id, one AS Colx, 'one' Colname From Table1 UNION ALL
   SELECT id, two AS Colx, 'Two' Colname From Table1 UNION ALL
   SELECT id, three AS Colx, 'Three' colname From Table1 UNION ALL
   SELECT id, four AS Colx, 'four' colname From Table1 UNION ALL
   SELECT id, five AS Colx, 'Five' colname From Table1 UNION ALL
   SELECT id, six AS Colx, 'Six' colname From Table1
) as t1
where exist ( select 1 from (
SELECT id, Max(colx) AS colWithMax
FROM (
   SELECT id, one AS Colx, 'one' Colname From Table1 UNION ALL
   SELECT id, two AS Colx, 'Two' Colname From Table1 UNION ALL
   SELECT id, three AS Colx, 'Three' colname From Table1 UNION ALL
   SELECT id, four AS Colx, 'four' colname From Table1 UNION ALL
   SELECT id, five AS Colx, 'Five' colname From Table1 UNION ALL
   SELECT id, six AS Colx, 'Six' colname From Table1
)
group by id) as t2
where t1.id = t2.id
and  t1.colx = t2.colx)
;
于 2013-04-09T23:40:31.533 に答える