执行以下查询:
WITH cte AS (
SELECT CAST('" + mindate+ "' as varchar(255)) as fdate
UNION ALL
SELECT CAST(DATEADD(day, 1, fdate) as date)
FROM cte
WHERE fdate < '" + tday+"'
)
SELECT COUNT(fdate) AS Fdate
FROM cte left join tbl_Attendence on cte.fdate = tbl_Attendence.Datess
where tbl_Attendence.Datess is null
但是我结束了以下错误:
列中的锚点和递归部分之间的类型不匹配 递归查询“ cte”的“ fdate”。
答案 0 :(得分:1)
这是您的原始查询:
@media (max-width: 575px) {
.pieChart {
padding: 0px 60px 20px 60px;
}
.barChart {
margin: 0px;
padding: 0px 40px 20px 40px;
}
}
@media (min-width: 576px) and (max-width: 767px) {
.pieChart {
padding: 0px 20px 0px 20px;
}
.barChart {
margin: 0px;
padding: 0px 10px 0px 10px;
}
}
@media (min-width: 768px) and (max-width: 860px) {
.pieChart {
padding: 0px 60px 0px 60px;
}
.barChart {
margin: 0px;
padding: 0px 20px 0px 20px;
}
}
@media (min-width: 861px) and (max-width: 991px) {
.pieChart {
padding: 0px 85px 0px 85px;
}
.barChart {
margin: 0px;
padding: 0px 20px 0px 20px;
}
}
@media (min-width: 992px) and (max-width: 1100px) {
.pieChart {
padding: 0px 110px 0px 110px;
}
.barChart {
margin: 0px;
padding: 0px 60px 0px 60px;
}
}
@media (min-width: 1101px) and (max-width: 1199px) {
.pieChart {
padding: 0px 130px 0px 130px;
}
.barChart {
margin: 0px;
padding: 0px 60px 0px 60px;
}
}
问题在于CTE内部的第一个WITH cte AS
(
SELECT
CAST('" + mindate+ "' as varchar(255)) as fdate
UNION ALL
SELECT
CAST(DATEADD(day, 1, fdate) as date)
FROM
cte
WHERE
fdate < '" + tday+"'
)
SELECT
COUNT(fdate) AS Fdate
FROM
cte
left join tbl_Attendence on cte.fdate = tbl_Attendence.Datess
where
tbl_Attendence.Datess is null
是SELECT
类型,而联合副本(CTE内部的第二个VARCHAR(255)
)是SELECT
类型。由于您将这些结果加在一起,因此数据类型必须匹配。
有一个DATE
(WHERE
)正在比较字符串值。在我看来,您希望将其作为动态SQL。如果不先构建字符串,它将无法在普通SQL上运行。
由于我不知道您要完成什么,所以我无法提出解决方案。
如果Damien的建议是正确的,则可以使用以下内容找出fdate < '" + tday+"'
中缺少的日期:
tbl_Attendence
答案 1 :(得分:0)
答案 2 :(得分:0)
在并集中,所有记录必须具有相同的列和相同的列名称,您使用了fdate和date,您应该对列使用相同的名称
WITH cte AS (
SELECT CAST('" + mindate+ "' as varchar(255)) as fdate
UNION ALL
SELECT CAST(DATEADD(day, 1, fdate) as fdate)
FROM cte
WHERE fdate < '" + tday+"'
)
SELECT COUNT(fdate) AS Fdate
FROM cte left join tbl_Attendence on cte.fdate = tbl_Attendence.Datess
where tbl_Attendence.Datess is null