SSRS 2008, SQL Sever 2014 - наиболее эффективный код для двух наборов данных, использующих те же таблицы и поля - PullRequest
0 голосов
/ 27 апреля 2018

Я создал отчет SSRS с двумя отдельными наборами данных и имею отдельную таблицу для каждого набора данных. Оба набора данных обращаются к одним и тем же таблицам базы данных в SQL Server.

Dataset1 содержит детали, исключающие некоторые учетные записи. Dataset2 содержит данные для исключенных учетных записей.

Идея заключалась в том, чтобы при экспорте в Excel каждая таблица находилась на отдельной рабочей таблице.

Вопрос:
Вместо того, чтобы писать один и тот же код дважды (один раз для каждого набора данных), есть ли способ написать код один раз (и, следовательно, обработать только один раз) и сделать так, чтобы каждый набор данных обращался только к части этого кода? *

Мой код для наборов данных выглядит следующим образом:

Dataset 1:
===============

SELECT AccountNumber
      ,Field 2
      ,Field 3

INTO #temp_table1

FROM MainTable
WHERE Condition1 AND condition2 AND condition3
-----------------------------------------------------------
SELECT AccountNumber    
INTO #temp_table2

FROM MainTable
WHERE Condition4 AND condition5
-----------------------------------------------------------
SELECT AccountNumber
      ,Field 2
      ,Field 3
FROM #temp_table1

WHERE AccountNumber NOT IN (SELECT AccountNumber FROM #temp_table2)

И вот код для набора данных 2:

Dataset 2:
===============

SELECT AccountNumber
      ,Field 2
      ,Field 3

INTO #temp_table1

FROM MainTable
WHERE Condition1 AND condition2 AND condition3
-----------------------------------------------------------
SELECT AccountNumber
      ,Field 2
      ,Field 3

INTO #temp_table2

FROM MainTable
WHERE Condition4 AND condition5
-----------------------------------------------------------
SELECT AccountNumber
      ,Field 2
      ,Field 3
FROM #temp_table1

WHERE AccountNumber IN (SELECT AccountNumber FROM #temp_table2)
-- The only thing that changes in this code is that I have removed the NOT and only kept IN.

Возможное решение:

SELECT AccountNumber
      ,Field 2
      ,Field 3
INTO #temp_dataset1
FROM #temp_table1

WHERE AccountNumber NOT IN (SELECT AccountNumber FROM #temp_table2)

SELECT AccountNumber
      ,Field 2
      ,Field 3
INTO #temp_dataset2
FROM #temp_table1

WHERE AccountNumber IN (SELECT AccountNumber FROM #temp_table2)

Набор данных 1:

SELECT * FROM #temp_Dataset1

Набор данных 2:

SELECT * FROM #temp_Dataset2

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я согласен с Таб Аллеманом.

Вы можете использовать подзапросы в операторе SELECT или создать «Внутреннее соединение», я бы порекомендовал последнее. Примерно так:

SELECT a.Account Number
,a.Field 2
,a.Field 3
,b.Account Number
,b.Field 2
,b.Field 3

FROM MainTable a
INNER JOIN MainTable b
  ON Condition 1
  AND Condition 2
  AND Condition 3 

Я уверен, что данные, с которыми вы работаете, более сложные, но это может дать вам хорошую идею.

0 голосов
/ 27 апреля 2018

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

Затем в SSRS вы фильтруете, какое подмножество вы хотите для каждого Tablix (или любого используемого вами объекта, управляемого данными).

...