请查看下表。
表1
Key Title Type
----------------------
A1 Test1 A
A2 Test2 A
B1 Test1 B
B2 Test2 B
B3 Test3 B
C1 Test1 C
C2 Test2 C
表2
Id Name Address A B C
---------------------------------------------------
1 Soham Add1 A1 B1,B3 C2
2 Varun Add2 A1,A2 B1,B2,B4 C1
我的rdlc报告看起来像Id = 1
Name : Soham
Address : Add1
Type : A
A1 - Yes
A2 - No
Type : B
B1 - Yes
B2 - No
B3 - Yes
B4 - No
Type : C
C1 - No
C2 - Yes
和报告看起来像Id = 2
Name : Varun
Address : Add2
Type : A
A1 - Yes
A2 - Yes
Type : B
B1 - Yes
B2 - Yes
B3 - No
B4 - Yes
Type : C
C1 - Yes
C2 - No
如果我没有使用Sub报告,我怎么能在单个查询中实现。 或者我如何使用子报告
实现这一目标答案 0 :(得分:0)
如果您使用的是MySQL,那么您可以使用“FIND_IN_SET()”函数并像这样应用......它将通过简单的数据分组以正确的顺序返回一个结果集...
select
PreQuery.*
from
( select
t2.id,
t2.`name`,
t2.Address,
t1.`type`,
t1.`key`,
case when FIND_IN_SET(t1.`key`, t2.A ) > 0 then 'yes' else 'no ' end HasKey
from
table1 t1,
table2 t2
where
t1.`type` = 'A'
UNION
select
t2.id,
t2.`name`,
t2.Address,
t1.`type`,
t1.`key`,
case when FIND_IN_SET(t1.`key`, t2.B ) > 0 then 'yes' else 'no ' end HasKey
from
table1 t1,
table2 t2
where
t1.`type` = 'B'
UNION
select
t2.id,
t2.`name`,
t2.Address,
t1.`type`,
t1.`key`,
case when FIND_IN_SET(t1.`key`, t2.C ) > 0 then 'yes' else 'no ' end HasKey
from
table1 t1,
table2 t2
where
t1.`type` = 'C' ) PreQuery
order by
PreQuery.`name`,
PreQuery.`type`,
PreQuery.`key`
如果您使用的是SQL-Server,请将函数调用从FIND_IN_SET()更改为CHARINDEX()
现在,即使上面的查询能够得到你想要的东西,你所拥有的却是非常糟糕的数据库设计。实际上你应该有另一个表,其中包含用户的密钥以及他们拥有的内容......例如......
UserHasTable
userHasID int auto-increment
userid int <-- to link to the person
hasKey varchar(??) <-- to correspond with the 'key' they have.
然后,每个人的记录都会像
UserHasID UserID HasKey
1 1 A1
2 1 B1
3 1 B3
4 1 C2
5 2 A1
6 2 A2
7 2 B1
8 2 B2
9 2 B4
10 2 C1
然后,您的查询可以简化,而无需明确分解每个A,B,C列