日期:2014-05-17  浏览次数:20510 次

SQL 查询某一行的值 返回不为空的列
现在我要实现的 软件的功能是 有一个产品 要经过15道工序 每道工序有相应的数据写入数据库 现在我要查询 该产品 已经经过了几道工序 并且 各历史工序的 信息
比如说   
  产品的ID  A  B  C   D   E      F     G   为列名 代表各个工序,当进行到工序D的时候 E F G均为NULL
     123    1  1  1   1  NULL  NULL   NULL
想要的查询结果是:
产品ID   A     B       C       D
123      1     1       1       1
求大神们帮忙啊
SQL???MFC?? SQL 数据库 软件 c++

------解决方案--------------------

WITH a1 (ID,A,B,C,D,E,F,G) AS
(
 SELECT 123,1,1,1,1,NULL,NULL,NULL
)
,a2 AS
(
SELECT ID,'A' NAME,A VALUE FROM a1
UNION ALL
SELECT ID,'B',B FROM a1
UNION ALL
SELECT ID,'C',C FROM a1
UNION ALL
SELECT ID,'D',D FROM a1
UNION ALL
SELECT ID,'E',E FROM a1
UNION ALL
SELECT ID,'F',F FROM a1
UNION ALL
SELECT ID,'G',G FROM a1
)
SELECT * INTO #cu1 FROM a2 NAME WHERE VALUE IS NOT NULL

select distinct NAME into #cu2 from #cu1

declare @sql varchar(max),@sql2 varchar(max)
select @sql = isnull(@sql + '],[' , '') + NAME from #cu2
set @sql = '[' + @sql + ']'
select @sql2 = isnull(@sql2 + ',' , ',') + 'isnull(['+NAME+'],0) ['+NAME+']' from #cu2
set @sql='select ID'+@sql2+' from #cu1 a pivot (MAX(VALUE) for NAME in (' + @sql + ')) b order by ID'