如何将1列中的多列存储为SQL中的值

时间:2019-04-23 17:44:01

标签: sql-server

如何从子查询中获取所有列并将其存储在1列中?我需要在1列中将其用作图表中的系列。

这是我的代码:

Select A,B,C,D,E,F as newcol from 
(SELECT 
COUNT(NULLIF(A,'')) as A,
COUNT(NULLIF(B,'')) as B,
COUNT(NULLIF(C,'')) as C,
COUNT(NULLIF(D,'')) as D,
COUNT(NULLIF(E,'')) as E,
COUNT(NULLIF(F,'')) as F
FROM MYTABLE)
as T

由于子查询结果的形式为1行。我需要将A,B,C,D,E,F作为列值,以用作图表中的序列值。我想以图形形式显示每列的计数(ABCDEF)(而不是1行6列,而结果是1列6列)

2 个答案:

答案 0 :(得分:0)

如果您只是想轮换数据,而MYTABLE实际上只有一行,那么最简单的方法似乎是:

SELECT V.YourColum
FROM MYTABLE T
     CROSS APPLY (VALUES(T.A),
                        (T.B),
                        (T.C),
                        (T.D),
                        (T.E),
                        (T.F)) V(YourColumn);

假定所有列具有相同的数据类型。

答案 1 :(得分:0)

从此:

Select A,B,C,D,E,F as newcol from

我想您希望将所有列串联为1列,如下所示:

Select concat(A, ',', B, ',', C, ',', D, ',', E, ',', F) as newcol from

如果只需要1列,每个值是1行,那么您的select语句中已经有这些值,可以将其与UNION ALL结合使用:

SELECT COUNT(NULLIF(A,'')) as newcol FROM MYTABLE
UNION ALL
SELECT COUNT(NULLIF(B,'')) FROM MYTABLE
UNION ALL
SELECT COUNT(NULLIF(C,'')) FROM MYTABLE
UNION ALL
SELECT COUNT(NULLIF(D,'')) FROM MYTABLE
UNION ALL
SELECT COUNT(NULLIF(E,'')) FROM MYTABLE
UNION ALL
SELECT COUNT(NULLIF(F,'')) FROM MYTABLE