基于三列唯一ID从sql中删除不需要的行

基于三列唯一ID从sql中删除不需要的行,sql,nested,distinct,sql-delete,Sql,Nested,Distinct,Sql Delete,这是密码。我在做一些愚蠢的事情-那是什么?我得到的只是语法错误 select code, shortDescription, longDescription, fullDescripton, codeType, useThruDate, updateDate, updateComment, createDate into #irish from (select distinct code, shortDescription, longD

这是密码。我在做一些愚蠢的事情-那是什么?我得到的只是语法错误

select 
    code, shortDescription, longDescription, fullDescripton, 
    codeType, useThruDate, updateDate, updateComment, createDate
into 
    #irish
from 
    (select distinct 
         code, shortDescription, longDescription
         when count(code + shortDescription + longDescription) > 1
             then delete from #irish where useThruDate <> '2016-30-06'
              else 0
        )
from [dbo].[irish]

我相信这就是你的目标:

/* Creates #irish table */    
CREATE TABLE #irish (
        code NVARCHAR(MAX)
        ,shortdescription NVARCHAR(MAX)
        ,longdescription NVARCHAR(MAX)
        ,fulldescription NVARCHAR(MAX)
        ,codeType NVARCHAR(MAX)
        ,useThruDate NVARCHAR(MAX)
        ,updateDate NVARCHAR(MAX)
        ,updateComment NVARCHAR(MAX)
        ,createDate NVARCHAR(MAX)
   /* insert select into #irish table */ 
    INSERT INTO #irish

    SELECT DISTINCT
    Code,ShortDescription,LongDescription, fullDescripton, 
        codeType, useThruDate, updateDate, updateComment, createDate
    FROM dbo.irish
    WHERE 
    useThruDate <> '2016-30-06'
    /* My best understanding of your count critera */ 
    AND (code IS NOT NULL
    OR shortdescription IS NOT NULL
    OR longdescription IS NOT NULL)

    /* selects records from #irish table (which we inserted in the last section) */
    SELECT * FROM #irish
    DROP TABLE #irish
值得注意的是,在当前查询中使用临时表几乎没有什么好处(如果有的话)


我希望这有帮助。您的原始代码有几个问题,请参阅Gordon的评论,因此如果您想深入挖掘,我建议您阅读一些教程。这是一个很好的起点

我相信这就是你的目标:

/* Creates #irish table */    
CREATE TABLE #irish (
        code NVARCHAR(MAX)
        ,shortdescription NVARCHAR(MAX)
        ,longdescription NVARCHAR(MAX)
        ,fulldescription NVARCHAR(MAX)
        ,codeType NVARCHAR(MAX)
        ,useThruDate NVARCHAR(MAX)
        ,updateDate NVARCHAR(MAX)
        ,updateComment NVARCHAR(MAX)
        ,createDate NVARCHAR(MAX)
   /* insert select into #irish table */ 
    INSERT INTO #irish

    SELECT DISTINCT
    Code,ShortDescription,LongDescription, fullDescripton, 
        codeType, useThruDate, updateDate, updateComment, createDate
    FROM dbo.irish
    WHERE 
    useThruDate <> '2016-30-06'
    /* My best understanding of your count critera */ 
    AND (code IS NOT NULL
    OR shortdescription IS NOT NULL
    OR longdescription IS NOT NULL)

    /* selects records from #irish table (which we inserted in the last section) */
    SELECT * FROM #irish
    DROP TABLE #irish
值得注意的是,在当前查询中使用临时表几乎没有什么好处(如果有的话)


我希望这有帮助。您的原始代码有几个问题,请参阅Gordon的评论,因此如果您想深入挖掘,我建议您阅读一些教程。这是一个很好的起点

你能补充你的问题编辑,一点样本数据和结果吗?不幸的是,他们都是varchars。code=int shortDescription=int longDescription=varchar text-human readable fullDescription=varchar text-human readable codeType=useThruDate所在的数据库的简短描述采用以下格式=YYYY-DD-MM updateDate=YYYY-DD-MM您试图做什么???从SQL语法来看,它看起来不正确。您缺少嵌套查询中的。你能解释一下你想做什么吗?不要在评论中发布代码/结果。使用按钮来更新你的问题。你的代码有太多的错误,真的没有地方可供选择-混合选择和删除,引用不存在的列,将聚合函数放在何处,使用没有分组依据的聚合函数。你应该删除这个问题,然后问另一个问题,提供样本数据和期望的结果,并解释你试图做什么。你能在你的问题上添加一些样本数据和结果吗?不幸的是,它们都是varchars。code=int shortDescription=int longDescription=varchar text-human readable fullDescription=varchar text-human readable codeType=useThruDate所在的数据库的简短描述采用以下格式=YYYY-DD-MM updateDate=YYYY-DD-MM您试图做什么???从SQL语法来看,它看起来不正确。您缺少嵌套查询中的。你能解释一下你想做什么吗?不要在评论中发布代码/结果。使用按钮来更新你的问题。你的代码有太多的错误,真的没有地方可供选择-混合选择和删除,引用不存在的列,将聚合函数放在何处,使用没有分组依据的聚合函数。你应该删除这个问题,然后问另一个问题,提供样本数据和期望的结果,并解释你试图做什么。