【发布时间】:2015-04-19 05:07:37
【问题描述】:
我有两个表,一个父表和一个子表。子表是一个垂直设计的表(意味着它存储和Id、ParentId、Property 和PropertyValue)。当然PropertyValue 可以保存所有类型的数据。
我正在尝试过滤此集合,但我正在努力处理错误的日期和空白字段。由于只读访问权限,我无法创建函数,因此我必须在实际查询中执行所有操作。我尝试使用子查询,但遇到无法从子查询中获取结果以在外部查询中使用的问题。
到目前为止,我得到了这个:
DECLARE @Year Int
SET @Year = 2015
SELECT
COUNT(Parent.ID), YEAR(PropertyValue), MONTH(PropertyValue)
FROM
Parent
INNER JOIN
Child ON Parent.ID = Child.ParentID
WHERE
Parent.ID IN (SELECT ParentID
FROM Child
WHERE Child.Property = 'MyDateField'
AND ISDATE(Child.PropertyValue) = 1)
AND Child.Property = 'MyDateField'
AND YEAR(Child.PropertyValue) = @Year
GROUP BY
YEAR(Child.PropertyValue), MONTH(Child.PropertyValue)
关于如何删除错误的日期行并继续使用所需的数据集有什么建议吗?
【问题讨论】:
-
SQL Server 版本?。如果版本是 2012 及更高版本,您可以使用 TRY_CAST。将 Child.PropertyValue 替换为 TRY_CAST(Child.PropertyValue AS datetime)
-
不幸的是 2005 年。更新了标签。
-
内部查询是否返回任何行?
-
是的,也是所需的行集。
-
记录在案。语法警察...人们写查询的方式有多种。这只是编辑让你再次出现吗?噗。
标签: sql sql-server database tsql sql-server-2005