Вы можете попробовать использовать функции MAX
и MIN
, чтобы получить ожидаемый результат.
SELECT a.COUNTRY,
a.CITY,
a.SITE,
a.Address,
MAX(c.Network_Priority),
MAX(c.Dedicated_Network),
MAX(c.Other_Network),
MAX(c.LAN_One),
MAX(c.LAN_two),
MAX(c.LAN_three),
MAX(c.LAN_four),
MAX(c.LAN_five),
MAX(c.LAN_six),
MAX(c.LAN_seven),
MIN(b.Remark) Remark
FROM server_data a
LEFT OUTER JOIN site_remark b ON a.SITE = b.SITE_ABBR
INNER JOIN lan_service c ON a.LAN_ABBR = c.LAN
GROUP BY a.COUNTRY,a.CITY,a.SITE,a.Address
Вот простая
CREATE TABLE T(
LAN_ABBR VARCHAR(50),
COUNTRY VARCHAR(50),
CITY VARCHAR(50),
SITE VARCHAR(50),
Address VARCHAR(50),
Network_Priority VARCHAR(50),
Dedicated_Network VARCHAR(50),
Other_Network VARCHAR(50),
LAN_One VARCHAR(50),
LAN_two VARCHAR(50),
LAN_three VARCHAR(50),
LAN_four VARCHAR(50),
LAN_five VARCHAR(50),
LAN_six VARCHAR(50),
LAN_seven VARCHAR(50),
Remark VARCHAR(50)
);
INSERT INTO T VALUES ('ABC1','India','Delhi','XYZ1','Delhi 1','yes','no','no','yes','no','yes','yes','yes','no','no','Delhi Network 1');
INSERT INTO T VALUES ('ABC2','India','Delhi','XYZ1','Delhi 1','no','no','yes','no','yes','no','no','no','yes','no','Delhi Network 1');
INSERT INTO T VALUES ('ABC3','India','Delhi','XYZ1','Delhi 1','yes','no','no','yes','no','no','no','no','no','no','Delhi Network 1');
INSERT INTO T VALUES ('ABC4','India','Delhi','XYZ2','Delhi 1','yes','no','yes','no','yes','no','no','no','yes','yes','Delhi Network 4');
Запрос 1 :
SELECT COUNTRY,
CITY,
SITE,
Address,
MAX(Network_Priority) Network_Priority,
MAX(Dedicated_Network) Dedicated_Network,
MAX(Other_Network) Other_Network,
MAX(LAN_One) LAN_One,
MAX(LAN_two) LAN_two,
MAX(LAN_three) LAN_three,
MAX(LAN_four) LAN_four,
MAX(LAN_five) LAN_five,
MAX(LAN_six) LAN_six,
MAX(LAN_seven) LAN_seven,
MIN(Remark) Remark
FROM T
GROUP BY COUNTRY,CITY,SITE,Address
Результаты
| COUNTRY | CITY | SITE | Address | Network_Priority | Dedicated_Network | Other_Network | LAN_One | LAN_two | LAN_three | LAN_four | LAN_five | LAN_six | LAN_seven | Remark |
|---------|-------|------|---------|------------------|-------------------|---------------|---------|---------|-----------|----------|----------|---------|-----------|-----------------|
| India | Delhi | XYZ1 | Delhi 1 | yes | no | yes | yes | yes | yes | yes | yes | yes | no | Delhi Network 1 |
| India | Delhi | XYZ2 | Delhi 1 | yes | no | yes | no | yes | no | no | no | yes | yes | Delhi Network 4 |
Примечание
этот запрос предполагает, что в ваших столбцах только три типа 'yes'
или 'no'
.
Если в ваших столбцах есть другие состояния, вы можете попробовать использовать агрегатную функцию условия
SELECT COUNTRY,
CITY,
SITE,
Address,
MAX(Network_Priority) Network_Priority,
MAX(CASE WHEN Dedicated_Network='yes' then 'yes' else 'no' end) Dedicated_Network,
MAX(CASE WHEN Other_Network='yes' then 'yes' else 'no' end) Other_Network,
MAX(CASE WHEN LAN_One='yes' then 'yes' else 'no' end) LAN_One,
MAX(CASE WHEN LAN_two='yes' then 'yes' else 'no' end) LAN_two,
MAX(CASE WHEN LAN_three='yes' then 'yes' else 'no' end) LAN_three,
MAX(CASE WHEN LAN_four='yes' then 'yes' else 'no' end) LAN_four,
MAX(CASE WHEN LAN_five='yes' then 'yes' else 'no' end) LAN_five,
MAX(CASE WHEN LAN_six='yes' then 'yes' else 'no' end) LAN_six,
MAX(CASE WHEN LAN_seven='yes' then 'yes' else 'no' end) LAN_seven,
MIN(Remark) Remark
FROM T
GROUP BY COUNTRY,CITY,SITE,Address