Это должно работать в вашем приложении:
Если он не работает, как КТР (Common Таблица Expression) в вашем приложении, то я буду переводить на вложенные запросы, которые должны работать точно.
WITH CUSTOMERS AS
(SELECT DISTINCT Customer
FROM routing),
DAY1 AS
(SELECT Customer,
Line
FROM routing
WHERE Line = 1
AND isnull(Text, '') <> ''),
DAY2 AS
(SELECT Customer,
Line
FROM routing
WHERE Line = 2
AND isnull(Text, '') <> ''),
DAY3 AS
(SELECT Customer,
Line
FROM routing
WHERE Line = 3
AND isnull(Text, '') <> ''),
DAY4 AS
(SELECT Customer,
Line
FROM routing
WHERE Line = 4
AND isnull(Text, '') <> ''),
DAY5 AS
(SELECT Customer,
Line
FROM routing
WHERE Line = 5
AND isnull(Text, '') <> '')
SELECT CUSTOMERS.Customer,
CASE WHEN DAY1.Line IS NULL THEN '' ELSE 'Mon' END AS 'Mon',
CASE WHEN DAY2.Line IS NULL THEN '' ELSE 'Tue' END AS 'Tue',
CASE WHEN DAY3.Line IS NULL THEN '' ELSE 'Wed' END AS 'Wed',
CASE WHEN DAY4.Line IS NULL THEN '' ELSE 'Thu' END AS 'Thu',
CASE WHEN DAY5.Line IS NULL THEN '' ELSE 'Fri' END AS 'Fri'
FROM CUSTOMERS
LEFT JOIN DAY1
ON CUSTOMERS.Customer = DAY1.Customer
LEFT JOIN DAY2
ON CUSTOMERS.Customer = DAY2.Customer
LEFT JOIN DAY3
ON CUSTOMERS.Customer = DAY3.Customer
LEFT JOIN DAY4
ON CUSTOMERS.Customer = DAY4.Customer
LEFT JOIN DAY5
ON CUSTOMERS.Customer = DAY5.Customer
Хорошо, я пошел вперед и создал версию вложенного запроса. Я очень уверен, что это будет работать в вашем приложении.
SELECT DISTINCT C.Customer,
CASE WHEN DAY1.Line IS NULL THEN '' ELSE 'Mon' END AS 'Mon',
CASE WHEN DAY2.Line IS NULL THEN '' ELSE 'Tue' END AS 'Tue',
CASE WHEN DAY3.Line IS NULL THEN '' ELSE 'Wed' END AS 'Wed',
CASE WHEN DAY4.Line IS NULL THEN '' ELSE 'Thu' END AS 'Thu',
CASE WHEN DAY5.Line IS NULL THEN '' ELSE 'Fri' END AS 'Fri'
FROM routing C
LEFT JOIN (SELECT Customer,
Line
FROM routing
WHERE Line = 1
AND isnull(Text, '') <> '') DAY1
ON C.Customer = DAY1.Customer
LEFT JOIN (SELECT Customer,
Line
FROM routing
WHERE Line = 2
AND isnull(Text, '') <> '') DAY2
ON C.Customer = DAY2.Customer
LEFT JOIN (SELECT Customer,
Line
FROM routing
WHERE Line = 3
AND isnull(Text, '') <> '') DAY3
ON C.Customer = DAY3.Customer
LEFT JOIN (SELECT Customer,
Line
FROM routing
WHERE Line = 4
AND isnull(Text, '') <> '') DAY4
ON C.Customer = DAY4.Customer
LEFT JOIN (SELECT Customer,
Line
FROM routing
WHERE Line = 5
AND isnull(Text, '') <> '') DAY5
ON C.Customer = DAY5.Customer
Какой SQL вы используете? – UnhandledExcepSean
«Microsoft SQL», поскольку вы используете его, означает Microsoft ** SQL Server **? Или вы ссылаетесь на Microsoft ** Access ** SQL ?? Пожалуйста, добавьте тег 'sql-server' или' ms-access', чтобы уточнить - спасибо! –
Только быстрая мысль, прежде чем я отправился в бейсбольную игру моего сына ... вы могли бы написать пять запросов, каждый из которых представлял бы день. Запросы будут использовать предложение where. Затем вы объедините все пять запросов вместе, чтобы сделать свой окончательный результат. Я напишу эти вопросы как ответ, как только вернусь домой. –