如何从每一列中选择所有非NULL值...需要LINQ或ADO查询吗?

时间:2015-04-25 07:47:19

标签: sql sql-server linq sql-server-2008 linq-to-sql

请回答这个问题...我试图制作单个表而不是多个表

表格结构如

ID    COL1       COL2      COL3   ...  ...
1     SHIRT      NULL      NULL
2     SKIRT      NULL      NULL
3     TROUSER    NULL      NULL
4     NULL       WINTER    NULL
5     NULL       SUMMER    NULL
6     NULL       AUTUMN    NULL
7     NULL       NULL      NIGHT
8     NULL       NULL      EVENING
9     NULL       NULL      NULL
.     ..         ..        ..

1 个答案:

答案 0 :(得分:0)

我们可以通过使用row_number,order by和Common table Expression

来实现这一点
declare @table table(ID int,Col1 varchar(10),col2 Varchar(10),Col3 Varchar(10))
insert into @table(ID,Col1,col2,col3)values (1,'Shirt',NULL,NULL) ,
(2,'SKIRT',NULL,NULL),(3,'TROUSER',NULL,NULL),(4,NULL,'WINTER',NULL),(5,NULL,'SUMMER',NULL)
,(6,NULL,'AUTUMN ',NULL),(7,NULL,NULL,'NIGHT'),(8,NULL,NULL,'Evening')
;with CTE AS (
select col1,ROW_NUMBER()OVER( ORDER BY (SELECT NULL))R from @table
where Col1 is not NULL
), CTE1 AS (
select col2,ROW_NUMBER()OVER( ORDER BY (SELECT NULL))R from @table
where Col2 is not NULL
), CTE2 AS (
select col3,ROW_NUMBER()OVER( ORDER BY (SELECT NULL))R from @table
where Col3 is not NULL
)
select c.col1,cc.col2,ccc.Col3 from CTE C INNER JOIN cte1  CC
ON c.R = cc.R LEFT JOIN CTE2 CCC ON 
CCC.R = C.R