2014-12-17 4 views
0

У меня есть небольшая головоломка для себя. PK - это комбинация lineNr и typeNr Я хочу сделать выбор, где все is_adres равно N и одинаковы для всех linenrs, то же самое касается is_postaddres. И я хочу получить результат в одном представлении.sql puzzle sql server 2000

это Ват я хочу, как конечный результат

typenr,is_Adres ,is_postaddres 
10, null , 'N' 
11, 'N', null 
13, 'N', 'N' 

Сценарий создания таблицы + TestData

CREATE TABLE lineAdres 
( 
lineNr int, 
typeNr int, 
is_Adres char(1), 
is_postaddres char(1) 
); 

INSERT INTO lineAdres VALUES 
(1, 10,'J','N'), 
(1, 11,'N','J'), 
(1, 12,'N','J'), 
(1, 13,'N','N'), 
(2, 10,'J','N'), 
(2, 11,'N','J'), 
(2, 12,'J','N'), 
(2, 13,'N','N'); 

Я хочу присоединиться к этому 2 мнения в один .. но как, и я получил чувство это может быть более эффективным!

select typenr, is_adres 
from lineAdres 
where is_adres = 'N' 
group by typenr, is_adres 
having count(*) = 2 

select typenr, is_postaddres 
from lineAdres 
where is_postaddres = 'N' 
group by typenr, is_postaddres 
having count(*) = 2 

ответ

1

Для объединения двух результатов используйте CTE и полное соединение для объединения данных.

WITH IsAddress AS(
select typenr, is_adres 
from lineAdres 
where is_adres = 'N' 
group by typenr, is_adres 
having count(*) = 2), 


IsPostAddress AS (select typenr, is_postaddres 
from lineAdres 
where is_postaddres = 'N' 
group by typenr, is_postaddres 
having count(*) = 2) 

SELECT 
     COALESCE(IsAddress.typenr,IsPostAddress.typenr) typenr, 
     IsAddress.IsAddress, 
     IsPostAdress.is_postaddres 
FROM 
     IsAddress 
     FULL OUTER JOIN 
     IsPostAdress 
      ON 
      IsAddress.typenr = IsPostAdress.typenr 
+0

увы это не так просто, is_adres и is_postaddres две разные столбцы, я хочу, чтобы вывести три колонки, а не два – lordkain

+0

понят. Я думаю, что лучше всего это сделать с помощью CTE. Я отредактировал ответ, чтобы показать, как это сделать. – ScholarYoshi

+3

Нет CTE в SQL Server 2000 ... используйте производную таблицу или какую-либо другую структуру. –