введите описание изображения здесь Работа с Jaspersoft и SQL: у меня есть таблица с названием Claims, которая имеет несколько полей, таких как ClaimNo, ShippingNo, ShippingAddress, TrackingNo и 5 других полей. Теперь пользователь может загрузить в эту же таблицу подмножество данных, просто скажите ClaimNo и ShippingNo. Мы можем отслеживать, когда загрузка была выполнена по дате, а также по пользователю, который создал загрузку.
Теперь мне нужно создать отчет SQL, в котором пользователь на внешнем интерфейсе может выбрать дату загрузки, пользователя, который загрузил данные, и 9 фильтров с выбором «да» или «нет», а объединения в резервной копии должны: создан на основе фильтров, которые они выбирают. Это делается для того, чтобы выяснить, есть ли в созданной ими загрузке уже совпадающие данные в существующей таблице.
Это запрос, с которым я столкнулся, при условии наличия одного совпадающего поля, поэтому у меня есть условие для присоединения их Но я ошибся в своем предположении. Условия объединения должны быть созданы на основе выбора пользователя
select
main.ClaimNo,
main.ShippingNo,
main.ShippingAddress,
main.TrackingNo
from ClaimsTable Main
inner join
(
select
ClaimNo,
ShippingNo,
ShippingAddress,
TrackingNo
from ClaimsTable
where uploaddate between date1 and date2
and uploadedby ='user1'
) Temp
on (join condition based on filters selected)
. Сначала я предполагал, что могу присоединиться с помощью поля идентификатора, но, очевидно, это невозможно, поскольку у них нет совпадающих идентификаторов. Я создал два параметра в Jasper, один из них - внешний интерфейс ShippingNo, с выпадающим списком да или нет,
($P{ShippingNo}.equals("Yes") ? "AND main.ShippingNo= temp.ShippingNo" : " ")
, если они выбрали да, тогда он будет добавлен в запрос выше. Но без установленного условия соединения, как мне добавить эти операторы, так как к ним всегда присоединено AND.
Итак, давайте скажем, что данные выглядели так, как в таблице утверждений, перед загрузкой:
**ID** **ClaimNo** **ShippingNo** **ShippingAddress** **TrackingNo** **UDate**
==================================================================================
1 101 s1 1501 Peters T1 1/23/2020
2 102 s2 5 Lombard Ave T2 1/23/2020
3 103 s3 23 Granville St T3 1/23/2020
4 104 s4 101 Park T4 1/24/2020
And then the next day user uploads data into the same table
**ID** **ClaimNo** **ShippingNo** **ShippingAddress** **TrackingNo** **UDate**
==================================================================================
1 101 s1 1501 Peters T1 1/23/2020
2 102 s2 5 Lombard Ave T2 1/23/2020
3 103 s3 23 Granville St T3 1/23/2020
4 104 s4 101 Park T4 1/24/2020
5 s3 T3 1/25/2020
6 s2 T2 1/25/2020
Теперь, если пользователь запускает отчет на внешнем интерфейсе: есть возможность выбора если они хотят соответствовать любому из приведенных ниже фильтров наряду с датой и пользователем. Таким образом, в нашем случае пользователь теперь хочет увидеть, совпадают ли две загрузки, которые он сделал недавно, с какими-либо уже существующими значениями (мы видим, что Отгрузка № и Отслеживание Нет совпадают)
Claim No -> Yes or No
Shipping No -> Yes or No
Shipping Address-> Yes or no
TrackingNo -> Yes or No
Они выбирают Да при отгрузке Нет и номер отслеживания
, поэтому теперь необходимо построить sql, как показано ниже
select
main.ClaimNo,
main.ShippingNo,
main.ShippingAddress,
main.TrackingNo
from ClaimsTable Main
inner join
(
select
ClaimNo,
ShippingNo,
ShippingAddress,
TrackingNo
from ClaimsTable
where uploaddate between date1 and date2
and uploadedby ='user1'
) Temp
on (main.ShippingNo = temp.Shipping no
and main.TrackingNo= temp.TrackingNo)
**ID** **ClaimNo** **ShippingNo** **ShippingAddress** **TrackingNo** **UDate**
==================================================================================
2 102 s2 5 Lombard Ave T2 1/23/2020
3 103 s3 23 Granville St T3 1/23/2020
Как мне заставить это работать? Нужно ли писать 81 комбинацию выбора пользовательских фильтров или есть более простой способ? Любое понимание будет полезно.