Установите 0 для некоторых столбцов в таблице - PullRequest
0 голосов
/ 28 июня 2019

Моя проблема в том, что я хочу установить 0 для каждого пропущенного LAST_YARD_ROW, предполагая, что у каждого парка есть свой номер или строки.

Проблема в линии перекрестного соединения.

SELECT  
    lypb.last_yard_park,
    lypb.last_yard_bay,
    lyr.last_yard_row,
    0 top_tier
FROM 
    (SELECT DISTINCT
         last_yard_bay,LAST_YARD_PARK 
     FROM
         TOWERS) lypb
CROSS JOIN 
    (SELECT DISTINCT LAST_YARD_ROW FROM TOWERS) lyr (last_yard_row)
WHERE 
    NOT EXISTS (SELECT *
                FROM TOWERS t
                WHERE t.last_yard_bay = lypb.last_yard_bay
                  AND t.LAST_YARD_PARK= lypb.LAST_YARD_PARK
                  AND t.last_yard_row = lyr.last_yard_row)

UNION

SELECT * 
FROM TOWERS
ORDER BY 
    LAST_YARD_PARK, LAST_YARD_BAY, LAST_YARD_ROW;

Это мой вывод:

 park   Bay    Row      Tier
 A1     007    00A      01
 A1     007    00B      0
 A1     007    00C      0
 A1     007    00D      0
 A1     007    00E      05
 A2     007    00A      0
 A2     007    00B      02
 A2     007    00C      0
 A2     007    00D      0
 A2     007    00E      0

И ожидаемый вывод, потому что парк A2 имеет только 00A 00B 00C только строки

 park   Bay    Row      Tier
 A1     007    00A      01
 A1     007    00B      0
 A1     007    00C      0
 A1     007    00D      0
 A1     007    00E      05
 A2     007    00A      0
 A2     007    00B      02
 A2     007    00C      0

1 Ответ

0 голосов
/ 01 июля 2019

Мне просто нужно было добавить фильтр после перекрестного соединения поверх lyr.LAST_YARD_ROW, чтобы он работал так:

SELECT  
    lypb.last_yard_park,
    lypb.last_yard_bay,
    lyr.last_yard_row,
    0 top_tier
FROM 
    (SELECT DISTINCT
    last_yard_bay,LAST_YARD_PARK 
FROM
     TOWERS) lypb
CROSS JOIN 
     (SELECT DISTINCT LAST_YARD_ROW FROM TOWERS) lyr (last_yard_row)
WHERE 
    lyr.LAST_YARD_ROW IN 
    (select distinct LAST_YARD_ROW FROM TOWERS 
    WHERE LAST_YARD_PARK=lypb.LAST_YARD_PARK )
AND
    NOT EXISTS (SELECT *
            FROM TOWERS t
            WHERE t.last_yard_bay = lypb.last_yard_bay
              AND t.LAST_YARD_PARK= lypb.LAST_YARD_PARK
              AND t.last_yard_row = lyr.last_yard_row)

UNION

SELECT * 
FROM TOWERS
ORDER BY 
    LAST_YARD_PARK, LAST_YARD_BAY, LAST_YARD_ROW; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...