Суммировать активную / неактивную страну - PullRequest
0 голосов
/ 10 июля 2020

У меня есть эти данные, которых я пытался достичь и написал здесь на SQL Server 2017: http://sqlfiddle.com/#! 18 / c457bc / 109

CREATE TABLE customer
    ([CustomerID] int, [State] varchar(34), [ContactName] varchar(18), [Address] varchar(29), [City] varchar(12), [PostalCode] varchar(8), [Country] varchar(9))
;
    
INSERT INTO customer
    ([CustomerID], [State], [ContactName], [Address], [City], [PostalCode], [Country])
VALUES
    (1, 'I', 'Maria Anders', 'Obere Str. 57', 'Berlin', '12209', 'Germany'),
    (2, 'A', 'Ana Trujillo', 'Avda. de la Constitución 2222', 'C', '05021', 'Mexico'),
    (3, 'I', 'Antonio Moreno', 'Mataderos 2312', 'B', '05023', 'Mexico'),
    (4, 'I', 'Thomas Hardy', '120 Hanover Sq.', 'London', 'WA1 1DP', 'UK'),
    (5, 'I', 'Christina Berglund', 'Berguvsvägen 8', 'Luleå', 'S-958 22', 'Sweden'),
    (6, 'I', 'Hanna Moos', 'Forsterstr. 57', 'Mannheim', '68306', 'Germany'),
    (7, 'A', 'Frédérique Citeaux', '24, place Kléber', 'Strasbourg', '67000', 'France'),
    (8, 'A', 'Martín Sommer', 'C/ Araquil, 67', 'Madrid', '28023', 'France'),
    (9, 'A', 'Laurence Lebihans', '12, rue des Bouchers', 'Marseille', '13008', 'France'),
    (10, 'A', 'Elizabeth Lincoln', '23 Tsawassen Blvd.', 'Tsawassen', 'T2F 8M4', 'Canada'),
    (11, 'I', 'Victoria Ashworth', 'Fauntleroy Circus', 'London', 'EC2 5NT', 'UK'),
    (12, 'A', 'Francisco Chang', 'Sierras de Granada 9993', 'A', '05022', 'Mexico')

Я хочу чтобы получить данные в этом формате

Требуется формат данных

Germany | I
UK      | I
Mexico  | A
France  | A
Sweden  | I
Canada  | A

В основном, если состояние страны A (активно) или I (неактивно), состояние должно показывать A, если состояние все A, то оно должно показывать A, если все Есть, только тогда он должен показать I.

Это небольшой набор данных, но я работаю с большим набором данных.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 10 июля 2020

Пожалуйста, посмотрите на скрипку

FIDDLE

SELECT
DISTINCT COUNTRY,
CASE
WHEN (SELECT COUNT(*) FROM CUSTOMER WHERE COUNTRY=C.COUNTRY AND STATE='A')<=0 THEN 'I' 
WHEN (SELECT COUNT(*) FROM CUSTOMER WHERE COUNTRY=C.COUNTRY AND STATE='I')<=0 THEN 'A'
ELSE 'A'
END AS STATE
FROM 
CUSTOMER C

То, что я сделал, это все COUNTRY как уникальные с DISTINCT, а затем посчитайте значения с буквами «A» или «I». Если значение равно ZERO, то установите в качестве ответа противоположное STATE и так далее. В противном случае установите A.

...