group by SUBSTR(MI_CODE,1,5),''
时间: 2024-01-08 12:02:50 浏览: 23
在您的查询语句中,group by 子句用于按照指定的列或表达式对结果进行分组。在您的情况下,您使用了 SUBSTR(MI_CODE, 1, 5) 对 MI_CODE 字段的前五个字符进行分组。
然而,在 group by 子句中出现了一个空字符串 (''),这是不合法的。group by 子句应该包含要分组的列或表达式。
如果您想要仅按照 MI_CODE 字段的前五个字符进行分组,您可以简单地修改查询语句如下:
```sql
SELECT
SUBSTR(MI_CODE, 1, 5) AS MI_CODE_PREFIX,
SUM(CASE WHEN MI_VALUE IS NULL THEN 1 WHEN MI_VALUE = 'null' THEN 1 ELSE 0 END) AS SL
FROM
CPM_EM_MNTING_W
WHERE
GX_TIME >= SYSDATE - 1
GROUP BY
SUBSTR(MI_CODE, 1, 5)
```
在修改后的查询中,我们添加了一个别名为 MI_CODE_PREFIX 的列来存储 MI_CODE 字段的前五个字符。同时,我们按照该列进行分组,并统计满足条件的记录数量。
如果您有任何其他问题,请随时提问。
相关问题
select SUM(CASE WHEN MI_VALUE IS NULL THEN 1 WHEN MI_VALUE ='null' THEN 1 ELSE 0 END) SL from CPM_EM_MNTING_W where GX_TIME >= SYSDATE - 1 group by SUBSTR(MI_CODE,1,5),''
您的第一个问题是关于一个 SQL 查询语句的结果,查询语句中使用了 SUM 和 CASE WHEN 语句来统计满足特定条件的记录数量。根据您的查询条件,假设您想要统计在 CPM_EM_MNTING_W 表中,MI_VALUE 字段为 NULL 或 'null' 的记录数量,并按照 MI_CODE 字段的前五个字符进行分组。
以下是您的查询语句:
```sql
SELECT
SUM(CASE WHEN MI_VALUE IS NULL THEN 1 WHEN MI_VALUE = 'null' THEN 1 ELSE 0 END) AS SL
FROM
CPM_EM_MNTING_W
WHERE
GX_TIME >= SYSDATE - 1
GROUP BY
SUBSTR(MI_CODE, 1, 5)
```
请注意,SYSDATE 是 Oracle 数据库函数,表示当前日期和时间。如果您使用的是其他数据库,可能需要根据具体数据库的函数来替换 SYSDATE。
以上查询将返回一个名为 SL 的列,其中包含满足条件的记录数量。同时,结果将按照 MI_CODE 字段的前五个字符进行分组。
如果您有任何其他问题,请随时提问。
SELECT '与血液透析相关血液感染发生率' as zbmc, SUBSTR(YW_TS, 1, 7) yearmonth, TO_DATE(YW_TS, 'YYYY-MM-DD') yw_ts, ORG_CODE, ORG_NAME, SUM(NUM_FZ_3) NUM_FZ, SUM(NUM_FM_3) NUM_FM FROM UH_GR_ICU GROUP BY SUBSTR(YW_TS, 1, 7), TO_DATE(YW_TS, 'YYYY-MM-DD'), ORG_CODE, ORG_NAME 加四个字段,一个是上个月的num_fz,num_fm,还有是去年这个月的num_fz,num_fm
可以通过使用子查询或连接外部表来实现添加这些新字段的功能。以下是使用子查询的示例:
```
SELECT
'与血液透析相关血液感染发生率' as zbmc,
SUBSTR(YW_TS, 1, 7) yearmonth,
TO_DATE(YW_TS, 'YYYY-MM-DD') yw_ts,
ORG_CODE,
ORG_NAME,
SUM(NUM_FZ_3) NUM_FZ,
SUM(NUM_FM_3) NUM_FM,
(SELECT SUM(NUM_FZ_3) FROM UH_GR_ICU WHERE SUBSTR(YW_TS, 1, 7) = SUBSTR(UH_GR_ICU.YW_TS, 1, 7) AND ORG_CODE = UH_GR_ICU.ORG_CODE AND TO_DATE(YW_TS, 'YYYY-MM-DD') = ADD_MONTHS(TO_DATE(YW_TS, 'YYYY-MM-DD'), -1)) AS LAST_MONTH_NUM_FZ,
(SELECT SUM(NUM_FM_3) FROM UH_GR_ICU WHERE SUBSTR(YW_TS, 1, 7) = SUBSTR(UH_GR_ICU.YW_TS, 1, 7) AND ORG_CODE = UH_GR_ICU.ORG_CODE AND TO_DATE(YW_TS, 'YYYY-MM-DD') = ADD_MONTHS(TO_DATE(YW_TS, 'YYYY-MM-DD'), -1)) AS LAST_MONTH_NUM_FM,
(SELECT SUM(NUM_FZ_3) FROM UH_GR_ICU WHERE SUBSTR(YW_TS, 1, 7) = SUBSTR(UH_GR_ICU.YW_TS, 1, 7) - 1 AND ORG_CODE = UH_GR_ICU.ORG_CODE AND TO_DATE(YW_TS, 'YYYY-MM-DD') = TO_DATE(YW_TS, 'YYYY-MM-DD')) AS LAST_YEAR_NUM_FZ,
(SELECT SUM(NUM_FM_3) FROM UH_GR_ICU WHERE SUBSTR(YW_TS, 1, 7) = SUBSTR(UH_GR_ICU.YW_TS, 1, 7) - 1 AND ORG_CODE = UH_GR_ICU.ORG_CODE AND TO_DATE(YW_TS, 'YYYY-MM-DD') = TO_DATE(YW_TS, 'YYYY-MM-DD')) AS LAST_YEAR_NUM_FM
FROM UH_GR_ICU
GROUP BY
SUBSTR(YW_TS, 1, 7),
TO_DATE(YW_TS, 'YYYY-MM-DD'),
ORG_CODE,
ORG_NAME;
```
这个查询将在原始查询的基础上添加上个月和去年同期的 num_fz 和 num_fm 字段。请注意,这里使用了 Oracle 的 ADD_MONTHS 函数来计算上个月的日期,并使用了子查询来获取相应的值。如果使用的是其他数据库,可能需要使用不同的日期函数和语法来实现类似的查询。