配置单元中的分组集产生的结果与sql server不同

bybem2ql  于 2021-06-27  发布在  Hive
关注(0)|答案(0)|浏览(283)

我有一个正在尝试转换为配置单元的sql server查询,但使用分组集无法获得预期的结果。总的目标是能够提取所有需要的信息来对每个值进行小计,为每个字段生成一次创建报告所需的数据。出于某种原因,hive不管在什么地方都会为field2返回y,因为sql server只返回y一次。
在sql server中,查询如下所示:

  1. select
  2. f.field1, f.field2, f.field3, count(*) count
  3. from
  4. (select
  5. case
  6. when field1 > '' then 'Selected'
  7. else ''
  8. end field1,
  9. field2, field3,
  10. row_number() over (partition by ds.field4, ds.field5, ds.field6 order by ds.keyfield asc) recid1
  11. from
  12. #data
  13. where
  14. field3 in ('12345', '67890')
  15. and field2 = 'Y'
  16. and field1 > '') f
  17. where
  18. recid1 = 1
  19. group by
  20. grouping sets ((),f.field1, f.field2, f.field3)

这将返回以下结果:

  1. field1 |field2|field3|count
  2. NULL |NULL |12345 |10
  3. NULL |NULL |67890 |2
  4. NULL |NULL |NULL |12
  5. NULL |Y |NULL |12
  6. Selected|NULL |NULL |12

当我尝试在配置单元中运行类似的查询时,会得到不同的结果:

  1. select f.field1, f.field2, f.field3,count(*) count
  2. from (
  3. select
  4. case
  5. when field1 > '' then 'Selected'
  6. else ''
  7. end field1,
  8. field2,
  9. field3,
  10. row_number() over (partition by ds.field4, ds.field5, ds.field6 order by ds.keyfield asc) recid1
  11. from mydb.mytable ds
  12. where
  13. field3 in ('12345','67890')
  14. and ds.field2 = 'Y'
  15. and ds.field1 > ''
  16. )f where recid1=1
  17. group by f.field1, f.field2, f.field3
  18. grouping sets ((),f.field1, f.field2, f.field3)

结果:

  1. +-----------+-----------+-----------+--------+
  2. | f.field1 | f.field2 | f.field3 | count |
  3. +-----------+-----------+-----------+--------+
  4. | NULL | Y | 12345 | 10 |
  5. | Selected | Y | NULL | 12 |
  6. | NULL | Y | NULL | 12 |
  7. | NULL | Y | 67890 | 2 |
  8. | NULL | Y | NULL | 12 |
  9. +-----------+-----------+-----------+--------+

样本数据:

  1. create table #data (field1 varchar(10),field2 varchar(10),field3 varchar(10),field4 varchar(10),field5 varchar(10),field6 varchar(10),keyfield varchar(10))
  2. insert into #data select '1','Y','12345','1','1','1','1'
  3. insert into #data select '2','Y','67890','2','2','2','2'
  4. insert into #data select '3','Y','67890','3','3','3','3'
  5. insert into #data select '4','Y','12345','4','4','4','4'
  6. insert into #data select '5','Y','12345','5','5','5','5'
  7. insert into #data select '6','Y','12345','6','6','6','6'
  8. insert into #data select '7','Y','12345','7','7','7','7'
  9. insert into #data select '8','Y','12345','8','8','8','8'
  10. insert into #data select '9','Y','12345','9','9','9','9'
  11. insert into #data select '10','Y','12345','10','10','10','10'
  12. insert into #data select '11','Y','12345','11','11','11','11'
  13. insert into #data select '12','Y','12345','12','12','12','12'

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题