Как изменить значение в последней строке, возвращаемой запросом SQL? - PullRequest
1 голос
/ 16 февраля 2011

У меня возникают проблемы при написании SQL-запроса, который возвращает строки, для которых определенное значение помещается в поле последней возвращенной строки (эта модификация выполняется только для возвращаемых результатов, не должно быть никаких изменений записей базы данных).

Вот пример:

SELECT A.a, 
       A.b, 
       A.c
  FROM A
 WHERE A.b = 10

Возвращенные результаты:

A.a |A.b |A.c
--------------
1    10   zaza
2    10   zozo
3    10   zuzu
4    10   zozo

Я бы хотел, чтобы запрос автоматически помещал определенное значение в поле Acпоследний ряд, например:

A.a |A.b |A.c
--------------
1    10   zaza
2    10   zozo
3    10   zuzu
4    10   XXXX

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Если порядок строк определяется по столбцу a, следующее заменит значение C в «последней» строке.

select a
      ,b
      ,case when row_number() over(order by a) = count(*) over() then 'XXX' 
                                                                 else c end as c
  from v
order by a;   
0 голосов
/ 16 февраля 2011

Немного грязнее:

SELECT A,
       B,
       CASE
         WHEN A = (SELECT MAX(A) FROM TEST WHERE B = 10) THEN 'XXXX'
         ELSE C
       END C
FROM TEST
0 голосов
/ 16 февраля 2011

Во-первых, вам нужен оператор ORDER BY.Oracle не гарантирует, что строки будут возвращены в том порядке, в котором они были введены, поэтому вам нужно изменить свой SQL на:

select A.a, A.b, A.c
From A
Where A.b = 10
ORDER BY A.a;

, чтобы концепция «последней» строки имела какое-либо значение.1004 *

Вот один из способов ... может быть, есть лучший способ сделать это, чем этот ...

SELECT A, B, C
FROM (
SELECT A.A, A.B, A.C
FROM   A
WHERE  A.A <> (SELECT MAX(A.A) FROM A WHERE A.B = 10)
AND    A.B = 10 
UNION ALL
SELECT A.A, A.B, 'whatever'
FROM   A
WHERE  A.A = (SELECT MAX(A.A) FROM A WHERE A.B = 10)
AND    A.B = 10
)
ORDER BY A.A

Вы не говорите, как должно быть поведение, если есть 2 строки, гдеАА одинаковы (если это возможно?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...