sql中将一行数据变成一列显示

时间:2020-12-09 10:50:59
sql中将一行数据变成一列显示
如图,将上图数据显示成一行,最后的效果是

  bm        西药     成药     草药     治疗     检查     化验     放射
急诊科   106.48  198.00  0.00    46.00   480.00  15.00  140.00

第三个草药是图中je(金额)为0的一项,所以图中没显示出来,但想在最后的结果中显示 


请各位高手帮忙看看,我才接触没多久,还不怎么会写,谢谢!

10 个解决方案

#1


如果你的列名是固定的个数就好做,给你个例子参考:

SELECT CASE
         WHEN 'XIYAO' = 'XIYAO' THEN
          'XIYAO'
       END XIYAO,
       CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          'ZHONGYAO'
       END ZHONGYAO,
       CASE
         WHEN 'QITA' = 'QITA' THEN
          'QITA'
       END QITA
  FROM DUAL;

#2


列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...

#3


SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 

#4


引用 2 楼 u012946496 的回复:
列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...


SELECT CASE
          WHEN 'XIYAO' = 'XIYAO' THEN
           DECODE((T.JE,'NULL', 0, T.JE)
        END XIYAO,CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          DECODE((T.JE,'NULL', 0, T.JE)
       END ZHONGYAO,CASE
         WHEN 'QITA' = 'QITA' THEN
          DECODE((T.JE,'NULL', 0, T.JE)
       END QITA FROM TABLE T;

#5


引用 2 楼 u012946496 的回复:
列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...

刚才的多了个括号
SELECT CASE
         WHEN 'XIYAO' = 'XIYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END XIYAO,
       CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END ZHONGYAO,
       CASE
         WHEN 'QITA' = 'QITA' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END QITA
  FROM DUAL T;

#6


引用 3 楼 gioh0022 的回复:
SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 


这个得出来是分行显示的,像这样

  bm    西药    成药   草药   治疗    检查
急诊科  106.48  
急诊科           198         
急诊科                         46
急诊科                                480

能把它们合在一行里显示么?

#7


引用 5 楼 zlloct 的回复:
Quote: 引用 2 楼 u012946496 的回复:

列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...

刚才的多了个括号
SELECT CASE
         WHEN 'XIYAO' = 'XIYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END XIYAO,
       CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END ZHONGYAO,
       CASE
         WHEN 'QITA' = 'QITA' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END QITA
  FROM DUAL T;


这样写结果是分行显示的,能把它们合成一行显示么?

#8


引用 6 楼 u012946496 的回复:
Quote: 引用 3 楼 gioh0022 的回复:

SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 


这个得出来是分行显示的,像这样

  bm    西药    成药   草药   治疗    检查
急诊科  106.48  
急诊科           198         
急诊科                         46
急诊科                                480

能把它们合在一行里显示么?


加个sum(),然后再group by id
SELECT ID,sum(decode(LXMC,'检查',JE,NULL)) AS '检查',....FROM table GROUP BY ID

#9


引用 8 楼 gioh0022 的回复:
Quote: 引用 6 楼 u012946496 的回复:

Quote: 引用 3 楼 gioh0022 的回复:

SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 


这个得出来是分行显示的,像这样

  bm    西药    成药   草药   治疗    检查
急诊科  106.48  
急诊科           198         
急诊科                         46
急诊科                                480

能把它们合在一行里显示么?


加个sum(),然后再group by id
SELECT ID,sum(decode(LXMC,'检查',JE,NULL)) AS '检查',....FROM table GROUP BY ID

sql中将一行数据变成一列显示非常感谢,我得出想要的结果了~

#10


非常感谢 gioh0022 的解答,我得出了想要的结果,也非常感谢 zlloct ,辛苦了 sql中将一行数据变成一列显示

#1


如果你的列名是固定的个数就好做,给你个例子参考:

SELECT CASE
         WHEN 'XIYAO' = 'XIYAO' THEN
          'XIYAO'
       END XIYAO,
       CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          'ZHONGYAO'
       END ZHONGYAO,
       CASE
         WHEN 'QITA' = 'QITA' THEN
          'QITA'
       END QITA
  FROM DUAL;

#2


列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...

#3


SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 

#4


引用 2 楼 u012946496 的回复:
列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...


SELECT CASE
          WHEN 'XIYAO' = 'XIYAO' THEN
           DECODE((T.JE,'NULL', 0, T.JE)
        END XIYAO,CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          DECODE((T.JE,'NULL', 0, T.JE)
       END ZHONGYAO,CASE
         WHEN 'QITA' = 'QITA' THEN
          DECODE((T.JE,'NULL', 0, T.JE)
       END QITA FROM TABLE T;

#5


引用 2 楼 u012946496 的回复:
列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...

刚才的多了个括号
SELECT CASE
         WHEN 'XIYAO' = 'XIYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END XIYAO,
       CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END ZHONGYAO,
       CASE
         WHEN 'QITA' = 'QITA' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END QITA
  FROM DUAL T;

#6


引用 3 楼 gioh0022 的回复:
SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 


这个得出来是分行显示的,像这样

  bm    西药    成药   草药   治疗    检查
急诊科  106.48  
急诊科           198         
急诊科                         46
急诊科                                480

能把它们合在一行里显示么?

#7


引用 5 楼 zlloct 的回复:
Quote: 引用 2 楼 u012946496 的回复:

列是固定的,我是想在列名下面显示该列对应的金额(je),我就是这 显示金额不会写...

刚才的多了个括号
SELECT CASE
         WHEN 'XIYAO' = 'XIYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END XIYAO,
       CASE
         WHEN 'ZHONGYAO' = 'ZHONGYAO' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END ZHONGYAO,
       CASE
         WHEN 'QITA' = 'QITA' THEN
          DECODE(T.JE, 'NULL', 0, T.JE)
       END QITA
  FROM DUAL T;


这样写结果是分行显示的,能把它们合成一行显示么?

#8


引用 6 楼 u012946496 的回复:
Quote: 引用 3 楼 gioh0022 的回复:

SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 


这个得出来是分行显示的,像这样

  bm    西药    成药   草药   治疗    检查
急诊科  106.48  
急诊科           198         
急诊科                         46
急诊科                                480

能把它们合在一行里显示么?


加个sum(),然后再group by id
SELECT ID,sum(decode(LXMC,'检查',JE,NULL)) AS '检查',....FROM table GROUP BY ID

#9


引用 8 楼 gioh0022 的回复:
Quote: 引用 6 楼 u012946496 的回复:

Quote: 引用 3 楼 gioh0022 的回复:

SELECT decode(LXMC,'检查',JE,NULL) AS '检查',....FROM 


这个得出来是分行显示的,像这样

  bm    西药    成药   草药   治疗    检查
急诊科  106.48  
急诊科           198         
急诊科                         46
急诊科                                480

能把它们合在一行里显示么?


加个sum(),然后再group by id
SELECT ID,sum(decode(LXMC,'检查',JE,NULL)) AS '检查',....FROM table GROUP BY ID

sql中将一行数据变成一列显示非常感谢,我得出想要的结果了~

#10


非常感谢 gioh0022 的解答,我得出了想要的结果,也非常感谢 zlloct ,辛苦了 sql中将一行数据变成一列显示