重复SQL查询并创建一个输出列

时间:2018-10-16 13:35:53

标签: sql-server tsql sql-server-2008

我被一个奇怪的问题困住了,这使我丧命。我有一张桌子,基本上可以归结为:

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

如果任何人都可以解决我遇到的这个奇怪问题并创建所需的输出,我将非常感激。

这里的性能并不是真正的问题,因为它要处理成千上万的行,所以游标或循环不是问题。

1 个答案:

答案 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