我的表格式是
TableName columnName IssueType IssueDetails
tblOrder_Inv OrderI_mnySalesTax1 DefaultValue MSSQL=NULL|MySql=0.0000
tblOrder_Inv OrderI_mnySalesTax1 DataType MSSQL=NULL|MySql=0.0000
tblOrder_Inv OrderI_dtmDateTime IsNullable MSSQL=NULL|MySql=0.0000
tblOrder_Inv OrderI_dtmDateTime DefaultValue MSSQL=NULL|MySql=CURRENT_TIMESTAMP
tblOrder_Inv OrderI_mnyInvTotal DefaultValue MSSQL=NULL|MySql=0.0000
我需要这种格式
TableName columnName DefaultValue IsNullable DataType
tblOrder_Inv OrderI_mnySalesTax1 Yes No Yes
tblOrder_Inv OrderI_dtmDateTime Yes Yes No
tblOrder_Inv OrderI_mnyInvTotal Yes No NO
数据流是每个表有很多列,每列有不同的问题 (DefaultValue DataType IsNullable)。每个有一个问题的列都插入一行。
例如tableA => ColumnA =>有两个问题说IsNullable,DefaultValue 插入为
tableA ColumnA IsNullable
tableA ColumnA DefaultValue
两行。
我需要这就像dis
tableA ColumnA Isnullable DefaultValue
同样..
如果相同的tableA具有任何issueType的ColumnB应该作为新行获取。
我试过Pivot
select * from ( select TableName,columnName, IssueType from #tmp) AS T
pivot (MAX(columnName) For IssueType In (DefaultValue,DataType,IsNullable)) as T2
没有得到预期的结果。是否有可能通过枢轴实现这一目标?
请帮帮我..
更新:
除此之外,我可以在接受的答案的最终查询中连接IssueDetails列吗?
答案 0 :(得分:3)
结果:
| TABLENAME | COLUMNNAME | DEFAULTVALUE | ISNULLABLE | DATATYPE |
|--------------|---------------------|--------------|------------|----------|
| tblOrder_Inv | OrderI_dtmDateTime | Yes | Yes | No |
| tblOrder_Inv | OrderI_mnyInvTotal | Yes | No | No |
| tblOrder_Inv | OrderI_mnySalesTax1 | Yes | No | Yes |
制作人:
SELECT
TableName
, columnName
, MAX(CASE
WHEN IssueType = 'DefaultValue' THEN 'Yes'
ELSE 'No' END) as DefaultValue
, MAX(CASE
WHEN IssueType = 'IsNullable' THEN 'Yes'
ELSE 'No' END) as IsNullable
, MAX(CASE
WHEN IssueType = 'DataType' THEN 'Yes'
ELSE 'No' END) as DataType
FROM table1
GROUP BY
TableName
, columnName
在“pivot”成为SQL指令之前,使用像这样的case表达式称为pivoting,它们对于此目的仍然非常有用。