如何更改数据的显示方式,以便将公主的名字分为两列,如“通缉输出”中所示。 Knight名字上的列分组为每个公主名字提供了一个公主专栏。我只想要两列,因为我知道一个骑士永远不会有两个以上的公主。
我从输入源获得的数据如下所示为“输入数据”。不幸的是我无法使用SQL来操作数据,因为QUERY基于FetchXML。我可以使用的唯一工具就是我从Reporting Services获得的内容(我使用的是Visual Studio 2015),因此在提出任何解决方案的同时考虑到这一点。
从技术上来说,骑士与公主之间存在1:M的关系,但系统中存在限制,因此骑士永远不会超过2个王子。骑士可以有0,1或2个公主。
输入数据
_________________________________
| Knight | Princess |
|_______________|_______________|
|_____Adam______|_____Anna______|
|_____Adam______|____Angelica___|
|_____Erik______|_____Erika_____|
|_____Erik______|______Eva______|
输出
_________________________________________________________________________________
| Knight | Princess 1 | Princess 2 | Princess 3 | Princess 4 |
|_______________|_______________|_______________|_______________|_______________|
|_____Adam______|_____Anna______|_____Angelica__|_______________|_______________|
|_____Erik______|_______________|_______________|_____Erika_____|_____Eva_______|
通缉输出
_________________________________________________
| Knight | Princess 1 | Princess 2 |
|_______________|_______________|_______________|
|_____Adam______|_____Anna______|___Angelica____|
|_____Erik______|_____Erika_____|_____Eva_______|
有什么建议吗?
答案 0 :(得分:2)
您可以使用数据集上的choose和lookupset来执行此操作:
char charAt( char * string, int position );
int main( int argc, char * argv[ ] ) {
int pos = atoi( argv[3] );
if( strcmp( argv[1], "charAt" ) == 0 )
{
printf( "%s", charAt( argv[2], pos ) );
}
}
char charAt( char *string, int position ){
int count = 0;
while( count != position ){
string++;
count++;
}
return *string;
}
等
在每一栏中。
答案 1 :(得分:1)
这几乎是不可能的,但是你已经为每个骑士拥有2个公主的(相当合理的)限制而幸运了。还有,你会被困住。
我会使用Table,而不是Matrix对象。第一栏是骑士。
下一列有一个静态标题“Princess 1”,表达式为:
=Min(Fields!Princess.Value)
第3列有一个静态标题“Princess 2”,表达式为:
=Iif ( Min(Fields!Princess.Value) = Max(Fields!Princess.Value) , "" , Max(Fields!Princess.Value) )
答案 2 :(得分:1)