Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择值大于零的列名_Sql_Sql Server - Fatal编程技术网

SQL选择值大于零的列名

SQL选择值大于零的列名,sql,sql-server,Sql,Sql Server,有人能帮助编写SQL查询,从表A生成表B吗 您可以使用交叉应用来实现这一点 声明@table Country varchar20、city varchar20、SalesJan20小数点2,1、salesFeb20小数点2,1、SalesMar20小数点2,1、SalesApril20小数点2,1 在@table values'Bangladesh'、'dhaka',0,1.5,0,1、'Bangladesh'、'comilla',2.5,0,1.6,1中插入; ;以CTE_CountryCit

有人能帮助编写SQL查询,从表A生成表B吗


您可以使用交叉应用来实现这一点

声明@table Country varchar20、city varchar20、SalesJan20小数点2,1、salesFeb20小数点2,1、SalesMar20小数点2,1、SalesApril20小数点2,1 在@table values'Bangladesh'、'dhaka',0,1.5,0,1、'Bangladesh'、'comilla',2.5,0,1.6,1中插入; ;以CTE_CountryCity为例 选择国家/地区、城市,当月数>0时选择最小值,然后选择月数结束作为最小月数,当月数>0时选择最大值,然后选择月数结束作为最大月数 来自@table 交叉应用 价值观 1、'SalesJan20',SalesJan20,2、'salesFeb20',salesFeb20,3、'SalesMar20',SalesMar20,4、'SalesApril20',SalesApril20 作为cMonthnum、MonthNm、Monthval 按国家、城市分组 选择国家、城市、最小月份作为SalesStartMonth,最大月份作为SalesEndMonth,最大月份-最小月份作为RangeMonth 来自CTE_CountryCity 国 城市 销售开始月 销售月 范围月 孟加拉国 科米拉 1. 4. 3. 孟加拉国 达卡 2. 4. 2. 您可以使用交叉应用。我倾向于这样做:

select a.country, a.city,
       choose(min_n, 'Jan', 'Feb', 'Mar', 'Apr') as sales_start_month,
       choose(max_n, 'Jan', 'Feb', 'Mar', 'Apr') as sales_end_month,
       v.range_month
from a cross apply
     (select min(n) as min_n, max(n) as max_n,
             max(n) - min(n) as range_month
      from (values (1, SalesJan20), (2, SalesFeb20), (3, SalesMar20), (4, SalesApr20)
           ) v(n, val)
      where val is not null
     ) v;

这里的关键思想是在用于交叉应用的子查询中进行聚合。从性能角度来看,在本地而不是在整个表上进行聚合应该是一个巨大的成功。

您的表设计有问题,每个月的销售额不应该有自己的列,而应该在所有销售额的单个列中有自己的记录。stackoverlfow不是一个代码编写服务。您需要显示您的尝试并提供示例数据,而不是放置图像