перекрестное объединение sql - какое использование кто-либо нашел для него? [закрытый]

Нет, задачи останутся в очереди, даже если вы измените некоторые элементы очереди задач, к которым они принадлежат, и повторно развернете queue.yaml.

11
задан Tony Andrews 10 November 2010 в 12:40
поделиться

5 ответов

Одно использование я столкнулся со много, разделяет записи на несколько записей, главным образом для создания отчетов о целях.

Вообразите строку, где каждый символ представляет некоторое событие в течение соответствующего часа.

ID | Hourly Event Data
1  | -----X-------X-------X--
2  | ---X-----X------X-------
3  | -----X---X--X-----------
4  | ----------------X--X-X--
5  | ---X--------X-------X---
6  | -------X-------X-----X--

Теперь Вы хотите отчет, который показывает, сколько событий произошло в какой день. Перекрестное объединение таблица с таблицей идентификаторов 1 - 24, затем работайте свое волшебство...

SELECT
   [hour].id,
   SUM(CASE WHEN SUBSTRING([data].string, [hour].id, 1) = 'X' THEN 1 ELSE 0 END)
FROM
   [data]
CROSS JOIN
   [hours]
GROUP BY
   [hours].id

=>

1,  0
2,  0
3,  0
4,  2
5,  0
6,  2
7,  0
8,  1
9,  0
10, 2
11, 0
12, 0
13, 2
14, 1
15, 0
16, 1
17, 2
18, 0
19, 0
20, 1
21, 1
22, 3
23, 0
24, 0
11
ответ дан 3 December 2019 в 01:02
поделиться

Типичное законное использование перекрестного объединения было бы отчетом что шоу, например, общий объем продаж продуктом и регионом. Если никакие продажи не были сделаны из продукта P в регионе R затем, мы хотим видеть строку с нулем, а не просто не показ строки.

select r.region_name, p.product_name, sum(s.sales_amount)
from regions r
cross join products p
left outer join sales s on  s.region_id = r.region_id
                        and s.product_id = p.product_id
group by r.region_name, p.product_name
order by r.region_name, p.product_name;
37
ответ дан 3 December 2019 в 01:02
поделиться

Я лично стараюсь избегать декартова произведения в своих запросах. Я предполагаю, имеют набор результатов каждой комбинации Вашего соединения, могло быть полезным, но обычно если я заканчиваю с одним, я знаю, что у меня есть что-то не так.

-3
ответ дан 3 December 2019 в 01:02
поделиться

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

Пример: recordset имеет балансы для каждого клиента и Направления деятельности, из которого поступает доход клиента. Отчет может только показать 'розничным' клиентам. Нет никакого способа получить сумму балансов для всей фирмы, но отчет показывает процент дохода фирмы.

С тех пор существуют различные поля баланса, я чувствовал, что это было менее сложно, чтобы иметь полное соединение с представлением, которое имеет несколько балансов (я могу также снова использовать это представление твердых общих количеств) вместо составленных запросов sub нескольких полей.

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

2
ответ дан 3 December 2019 в 01:02
поделиться

Я недавно использовал ПЕРЕКРЕСТНОЕ ОБЪЕДИНЕНИЕ в отчете, что мы используем для продаж forcasting, отчет должен вспыхнуть объем продаж, которые продавец сделал в каждой учетной записи Главной бухгалтерской книги.

Таким образом в отчете я делаю что-то с этой целью:

SELECT gla.AccountN, s.SalespersonN
FROM
    GLAccounts gla
    CROSS JOIN Salesperson s
WHERE (gla.SalesAnalysis = 1 OR gla.AccountN = 47500)

Это дает мне каждый счет GL на каждого продавца как:

SalesPsn    AccountN
1000    40100
1000    40200
1000    40300
1000    48150
1000    49980
1000    49990
1005    40100
1005    40200
1005    40300
1054    48150
1054    49980
1054    49990
1078    40100
1078    40200
1078    40300
1078    48150
1078    49980
1078    49990
1081    40100
1081    40200
1081    40300
1081    48150
1081    49980
1081    49990
1188    40100
1188    40200
1188    40300
1188    48150
1188    49980
1188    49990
0
ответ дан 3 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: