2016-09-12 10 views
0

У меня есть две таблицы - клиент и продукт, и у меня есть 10 клиентов и 5 продуктов.Как получить этот результат в SQL

я могу присоединиться к этому, например, запрос:

select 
    ca.id as customer_id,p.id as product_id 
from 
    customeraccount ca 
left join 
    product p on ca.id = p.customeraccountid 

Как Получать новую таблицу, которая похожа на декартовой, но который не является декартовой, как это:

enter image description here

Flaq это переменная, которая говорит, если этот клиент имеет этот продукт.

+4

Всегда помечать фактическую СУБД (поставщик и версия) ... – Shnugo

+2

Добавить некоторые примеры данных таблицы, как форматированный текст, а также ожидаемый результат также в виде форматированного текста. – jarlh

+0

Также добавьте структуру таблицы. –

ответ

1

CROSS JOIN может решить вашу проблему

SELECT ca.id as customer_id, 
     p.id as product_id, 
     CASE WHEN ca.id=p.customeraccountid THEN 1 ELSE 0 END AS Flag 
FROM customeraccount ca 
CROSS JOIN product p 
+0

Если я не ошибаюсь, весь вопрос не соответствует дизайну ... – Shnugo

1

Если у вас есть две таблицы вы Шоул переосмысливать свой дизайн. У вас должна быть хотя бы таблица для ваших клиентов, одна для ваших продуктов и одна для фактических продаж (или того, что вы хотите сделать здесь ...).

Поскольку вы здесь довольно новые, позвольте мне дать один совет: помогите сообществу SO с хорошим MCVE. Здесь я создаю для вас:

синтаксиса SQL-сервер ...

DECLARE @customer TABLE(CustomerID INT); 
INSERT INTO @customer VALUES(1001),(1002),(1003); 
DECLARE @prod TABLE(ProdID INT); 
INSERT INTO @prod VALUES(1),(2),(3); 
DECLARE @sales TABLE(CustomerID INT,ProdID INT); 
INSERT INTO @sales VALUES(1001,1),(1001,3) 
         ,(1002,1),(1002,2) 
         ,(1003,2); 

SELECT c.CustomerID 
     ,p.ProdID 
     ,CASE WHEN s.CustomerID IS NULL THEN 0 ELSE 1 END AS HasSale 
FROM @customer AS c 
CROSS JOIN @prod AS p 
LEFT JOIN @sales AS s ON s.ProdID=p.ProdID AND s.CustomerID=c.CustomerID 

Результата

Cust Prod HasSales 
1001 1 1 
1001 2 0 
1001 3 1 
1002 1 1 
1002 2 1 
1002 3 0 
1003 1 0 
1003 2 1 
1003 3 0 
Смежные вопросы