我被一个奇怪的问题困住了,这使我丧命。我有一张桌子,基本上可以归结为:
export class TableSegundaGrillaDataSource extends
DataSource<TableSegundaGrillaItem> {
data: any = [];
constructor(private paginator: MatPaginator, private sort: MatSort,
public grilla: GrillaCompleta) {
super();
this.data = grilla;
console.log('datasource segunda: ' + this.data);
}
connect(): Observable<TableSegundaGrillaItem[]> {
const dataMutations = [
observableOf(this.data),
this.paginator.page,
this.sort.sortChange
];
// Set the paginators length
this.paginator.length = this.data.length;
return merge(...dataMutations).pipe(map(() => {
return this.getPagedData(this.getSortedData([...this.data]));
}));
}
disconnect() {}
我已经收到运输订单表格的规范。对于ColB的每个值,我必须重复以下步骤,以便创建一个输出列。前两行是文本,第二行和第三行是B和C列中的前缀+值。此外,只有在填充ColE的情况下,我们才必须选择前缀加ColE。
这听起来可能令人困惑,所以我将添加所需的输出:
CREATE TABLE #Sample (ColA VARCHAR (20), ColB VARCHAR (20), ColC VARCHAR (20), ColD VARCHAR (10), ColE VARCHAR (10) )
INSERT INTO #Sample VALUES ('6250', '1001', '12AA', '12AA', ''),
('6250', '1002', '12AA', '12AA', ''),
('6251', '1003', '12BB', '12BB', 'A'),
('6252', '1004', '12CC', '12CC', '')
此设置有很多错误,但是我对此没有影响。因此,我将手头的问题束之高阁。
我的尝试是先创建一个“常规”输出表,然后再尝试创建一个包含一个列的新表。
我的代码尝试非常糟糕,但是无论如何我都会包括它:
'A1 Text'
'A2 Text'
'ZZ62501001' -- ZZ prefix + ColA + ColB
'ZZ12AA' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62501002' -- ZZ prefix + ColA + ColB
'ZZ12AA' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62511003' -- ZZ prefix + ColA + ColB
'ZZA' -- ZZ prefix + ColE (notice that this is only shown when ColE is filled)
'ZZ12BB' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62521004' -- ZZ prefix + ColA + ColB
'ZZ12CC' -- ZZ prefix + ColC
如果任何人都可以解决我遇到的这个奇怪问题并创建所需的输出,我将非常感激。
这里的性能并不是真正的问题,因为它要处理成千上万的行,所以游标或循环不是问题。
答案 0 :(得分:4)
使用交叉应用,您可以每行构建多行:
declare @Sample table (ColA VARCHAR (20), ColB VARCHAR (20), ColC VARCHAR (20), ColD VARCHAR (10), ColE VARCHAR (10) )
INSERT INTO @Sample VALUES ('6250', '1001', '12AA', '12AA', ''),
('6250', '1002', '12AA', '12AA', ''),
('6251', '1003', '12BB', '12BB', 'A'),
('6252', '1004', '12CC', '12CC', '')
select a.results
from @Sample
cross apply (values ('A1 Text')
,('A2 Text')
,('ZZ' + ColA + ColB)
,('ZZ' + ColC)
,('ZZ' + ColE)
) a(results)
where a.results != 'ZZ'
结果:
results
A1 Text
A2 Text
ZZ62501001
ZZ12AA
A1 Text
A2 Text
ZZ62501002
ZZ12AA
A1 Text
A2 Text
ZZ62511003
ZZ12BB
A1 Text
A2 Text
ZZ62521004
ZZ12CC