繁体   English   中英

基于 SQL 服务器中 select 查询中第一列值的值格式

[英]Value format based on 1st Column value in select query in SQL server

我有如下表 TableA

Channel      |  Column1 |  Column2 | Column3
---------------------------------------------
Channel1 %      10.20      10.30      15.50
Channel2        1000       10000      1000000
Channel3 %      5.10       8.50       12.45
Channel4        50000      3000       1500000

我想开发 select 查询以在值和 K(千)和 M(百万)逻辑旁边应用 % 符号,使其返回如下。

Channel      |  Column1 |  Column2 | Column3
---------------------------------------------
Channel1 %      10.20%      10.30%     15.50%
Channel2        1000        10K        1M
Channel3 %      5.10%       8.50%      12.45%
Channel4        50K         3000       1.5M

这很奇怪。 但假设值是字符串,您可以使用case表达式:

(case when channel like '%$%' escape '$'
      then concat(column1, '%')
      when column1 >= 1000 and column1 < 1000000
      then concat(left(column1, len(column1) - 3), 'K')
      when column1 >= 1000000
      then concat(left(column1, len(column1) - 6), 'M')
      else column1
 end) as column1

只需对所有列重复此逻辑即可。

我认为这可能比 Gordon 的逻辑更简单,但同样的想法:

CASE 
  WHEN RIGHT(channel, 1) = '%' THEN CONCAT(column1, '%')
  WHEN column1 >= 1000000 THEN FORMAT(column1/1000000.0, '0.#M')
  WHEN column1 >= 1000 THEN FORMAT(column1/1000.0, '0.#K')
  ELSE column1
END as column1

您可能需要一些特定的格式,具体取决于您想要的 K 和 M 中的小数位数; 你可以CONCAT(CAST(column1/1000.0 AS FLOAT), 'K')但这是一种减少数字尾随 0 数量的作弊方法。 如果您的 SQLS 支持 FORMAT,例如FORMAT(column1/1000.0, '0.#K')您应该考虑使用它

您可以使用 FORMAT function,但我们可以这样使用而不是硬编码数字。 虽然这种转换不应该在 SQL 服务器和演示应用程序处理这个

SELECT
    Channel1,
      CASE 
        WHEN LEN(FLOOR(COL1)) <= 2 THEN CONCAT(COL1,'%')
        WHEN (LEN(FLOOR(COL1)) >= 4 AND LEN(FLOOR(COL1)) <=5) THEN FORMAT(COL1,'0,K')
        WHEN LEN(FLOOR(COL1)) >= 5 THEN CONCAT(COL1,'M') 
        END AS COL1,
      CASE 
        WHEN LEN(FLOOR(COL2)) <= 2 THEN CONCAT(COL2,'%')
        WHEN (LEN(FLOOR(COL2)) >= 4 AND LEN(FLOOR(COL2)) <=5) THEN  FORMAT(FLOOR(COL2),'0,K')
        WHEN LEN(FLOOR(COL2)) >= 5 THEN FORMAT(FLOOR(COL2),'M') 
        END AS COL2,
     CASE 
        WHEN LEN(FLOOR(COL3)) <= 2 THEN CONCAT(COL3,'%')
        WHEN  (LEN(FLOOR(COL3)) >= 4 AND LEN(FLOOR(COL3)) <=5) THEN   FORMAT(FLOOR(COL3),'0,K')
        WHEN LEN(FLOOR(COL3)) >= 4 THEN FORMAT(FLOOR(COL3),'0,,M')
        END AS COL3
FROM 
   TABLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM