SQL Group BY COLUMN Выбор определенных строк - PullRequest
0 голосов
/ 25 апреля 2018

Я долго искал, но не смог найти интересных ответов.

Вот моя проблема, скажем, у меня есть таблица с 2 столбцами и несколькими строками:

column1  |   column2
         |
BKZ-54   |   N/A
BKZ-54   |   OPVE7
BKZ-54   |   OXP5V
ARF-47   |   RB5FR 
ARF-47   |   N/A
ARF-47   |   V7FTS 

Ожидаемый ответ после запроса SQL:

column1  |   column2
BKZ-54   |   OPVE7
ARF-47   |   RB5FR

Проблема в том, что, если я использую GROUP BY column1, будут выбраны случайные значения для column2, и я хочу исключить значения с N/A.

Если я использую GROUP BY column1 and WHERE column2 != 'N/A', то в ответе отсутствуют строки.

Я хочу, чтобы запрос SQL группировался по столбцу1 и получал случайное значение, соответствующее столбцу2, но отличающееся от 'N/A'.

Единственный способ увидеть 2 запроса SQL, но я ищу одноразовый запрос.Спасибо за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Пример SQL Server.Вы исключаете 'N / A', но реальная хитрость состоит в том, чтобы получить верхнюю 1 строку на значение Column1.Я выполняю это, генерируя номера строк, которые разделены на Column1, и затем принимаю только, где Row = 1.NEWID () приведет к их случайному порядку.Запустите внутренний оператор SELECT отдельно, чтобы увидеть, что он делает.

DECLARE @table TABLE (column1 VARCHAR(200),column2 VARCHAR(200))
INSERT INTO @Table SELECT 'BKZ-54','N/A'
INSERT INTO @Table SELECT 'BKZ-54','OPVE7'
INSERT INTO @Table SELECT 'BKZ-54','OXP5V'
INSERT INTO @Table SELECT 'ARF-47','RB5FR'
INSERT INTO @Table SELECT 'ARF-47','N/A'
INSERT INTO @Table SELECT 'ARF-47','V7FTS'

SELECT
    Column1,Column2
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY NEWID() ASC) AS [Row]
    FROM @table
    WHERE column2<>'N/A'
) AS OrderedData
WHERE OrderedData.[Row]=1
0 голосов
/ 25 апреля 2018

Я не уверен, если вы хотите действительно «случайное» значение, или если какое-то значение подойдет, и не важно, какое именно.Если это последнее, используйте агрегат, такой как MAX(), для выбора значения:

SELECT column1, MAX(column2)
FROM yourTable
WHERE column2 <> 'N/A'
GROUP BY column1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...