需要修改变量数据以在 COUNT 查询中用作 "LIKE"
Need to modify a variable data to use as a "LIKE" in a COUNT query
我试图在 LIKE 语句中使用数值变量,但我不知道如何将数据更改为数值。
在我们开始之前,我很抱歉,因为我无法复制 table 结构,因为我正在使用不允许我看到它的“SQL 环境”,所以我我会尽力解释的。
我有两个 table:
- 样本table
table 上的代码:
SELECT sample_number,project,status,template,parent_aliquot,C_DUE_DATE_2
FROM SAMPLE
ORDER BY SAMPLE_NUMBER DESC
enter image description here
- KPS_SMP_DUE_DATE_WEEK_PIVOT_VW
table 上的代码:
select *
from KPS_SMP_DUE_DATE_WEEK_PIVOT_VW
where project = 'S/180308/01'
此 table 的重要字段是“PROJECT”、“PRODUCT”和“YEAR”。 table 右侧的字段并不重要。
enter image description here
我有这个代码:
SELECT vw.project,vw.year,(SELECT COUNT(s.sample_number)
FROM SAMPLE s
WHERE s.PROJECT = vw.PROJECT AND s.STATUS IN ('I', 'U', 'P') and s.TEMPLATE = 'KPS_DEFAULT' AND s.PARENT_ALIQUOT > 0
and s.C_DUE_DATE_2 < {ts '2021-01-20 00:00:00'} and s.C_DUE_DATE_2 LIKE '%'vw.year'%')
FROM KPS_SMP_DUE_DATE_WEEK_PIVOT_VW vw
where vw.project = 'S/180308/01' and vw.department = 'QC'
如前所述,“KPS_SMP_DUE_DATE_WEEK_PIVOT_VW”具有按“年”字段分类的条目,因此我尝试使用以下代码获取每年过期的样本总数:
SELECT COUNT(s.sample_number)
FROM SAMPLE s
WHERE s.PROJECT = vw.PROJECT AND s.STATUS IN ('I', 'U', 'P') and s.TEMPLATE = 'KPS_DEFAULT' AND s.PARENT_ALIQUOT > 0
and s.C_DUE_DATE_2 < {ts '2021-01-20 00:00:00'} and s.C_DUE_DATE_2 LIKE '%'vw.year'%'
我希望“%'vw.year'%”能够正常工作,预期结果如下:
谢谢
enter image description here
您可以使用YEAR
或DATEPART
函数,如下所示:
YEAR(s.C_DUE_DATE_2) = vw.year
或
DATEPART(YEAR,s.C_DUE_DATE_2) = vw.year
您可能应该从 C_DUE_DATE_2 中提取年份值并将该值与 vw.year
进行比较
在您的查询中,更改
s.C_DUE_DATE_2 LIKE '%'vw.year'%'
和
YEAR(s.C_DUE_DATE_2) = vw.year
如果您有 C_DUE_DATE_2
索引,那么 不 在其上使用 YEAR
函数会快得多。相反,构造一个涵盖该年的日期间隔:
s.C_DUE_DATE_2 >= DATEFROMPARTS(vw.year, 1, 1)
AND s.C_DUE_DATE_2 < DATEFROMPARTS(vw.year + 1, 1, 1)
我试图在 LIKE 语句中使用数值变量,但我不知道如何将数据更改为数值。
在我们开始之前,我很抱歉,因为我无法复制 table 结构,因为我正在使用不允许我看到它的“SQL 环境”,所以我我会尽力解释的。
我有两个 table:
- 样本table
table 上的代码:
SELECT sample_number,project,status,template,parent_aliquot,C_DUE_DATE_2
FROM SAMPLE
ORDER BY SAMPLE_NUMBER DESC
enter image description here
- KPS_SMP_DUE_DATE_WEEK_PIVOT_VW
table 上的代码:
select *
from KPS_SMP_DUE_DATE_WEEK_PIVOT_VW
where project = 'S/180308/01'
此 table 的重要字段是“PROJECT”、“PRODUCT”和“YEAR”。 table 右侧的字段并不重要。
enter image description here
我有这个代码:
SELECT vw.project,vw.year,(SELECT COUNT(s.sample_number)
FROM SAMPLE s
WHERE s.PROJECT = vw.PROJECT AND s.STATUS IN ('I', 'U', 'P') and s.TEMPLATE = 'KPS_DEFAULT' AND s.PARENT_ALIQUOT > 0
and s.C_DUE_DATE_2 < {ts '2021-01-20 00:00:00'} and s.C_DUE_DATE_2 LIKE '%'vw.year'%')
FROM KPS_SMP_DUE_DATE_WEEK_PIVOT_VW vw
where vw.project = 'S/180308/01' and vw.department = 'QC'
如前所述,“KPS_SMP_DUE_DATE_WEEK_PIVOT_VW”具有按“年”字段分类的条目,因此我尝试使用以下代码获取每年过期的样本总数:
SELECT COUNT(s.sample_number)
FROM SAMPLE s
WHERE s.PROJECT = vw.PROJECT AND s.STATUS IN ('I', 'U', 'P') and s.TEMPLATE = 'KPS_DEFAULT' AND s.PARENT_ALIQUOT > 0
and s.C_DUE_DATE_2 < {ts '2021-01-20 00:00:00'} and s.C_DUE_DATE_2 LIKE '%'vw.year'%'
我希望“%'vw.year'%”能够正常工作,预期结果如下:
谢谢
enter image description here
您可以使用YEAR
或DATEPART
函数,如下所示:
YEAR(s.C_DUE_DATE_2) = vw.year
或
DATEPART(YEAR,s.C_DUE_DATE_2) = vw.year
您可能应该从 C_DUE_DATE_2 中提取年份值并将该值与 vw.year
进行比较在您的查询中,更改
s.C_DUE_DATE_2 LIKE '%'vw.year'%'
和
YEAR(s.C_DUE_DATE_2) = vw.year
如果您有 C_DUE_DATE_2
索引,那么 不 在其上使用 YEAR
函数会快得多。相反,构造一个涵盖该年的日期间隔:
s.C_DUE_DATE_2 >= DATEFROMPARTS(vw.year, 1, 1)
AND s.C_DUE_DATE_2 < DATEFROMPARTS(vw.year + 1, 1, 1)