SQL-使用两个条件查找不不同的值

SQL-使用两个条件查找不不同的值,sql,sql-server,Sql,Sql Server,展示比解释要容易得多: 我有下表: 这个想法是,我只需要Objekts,我已经在同一个月内输入了数据。 例如,需要aaa,因为我有两次8月份的数据。bbb是不需要的,因为我有一次在八月和九月,这是确定的 这就是我迄今为止所尝试的: SELECT objekt,count(*) as counter FROM tempt_report GROUP BY objekt HAVING count(*)>1 但是很明显,我没有提到对数据的要求,因此我没有得到我想要的 谢谢 SELECT o

展示比解释要容易得多:

我有下表:

这个想法是,我只需要Objekts,我已经在同一个月内输入了数据。 例如,需要aaa,因为我有两次8月份的数据。bbb是不需要的,因为我有一次在八月和九月,这是确定的

这就是我迄今为止所尝试的:

SELECT objekt,count(*) as counter
FROM tempt_report
GROUP BY objekt
HAVING count(*)>1
但是很明显,我没有提到对数据的要求,因此我没有得到我想要的

谢谢

   SELECT objekt,dateadd(month,DATEDIFF(MONTH, 0, datum),0) m
   FROM tempt_report
   GROUP BY objekt,DATEDIFF(MONTH, 0, datum)
   HAVING count(*)>1
你可以试试这个查询吗


您可以尝试此查询吗?

您可以这样尝试:

DECLARE @tbl TABLE(YourDate DATE,YourObjekt VARCHAR(100));

INSERT INTO @tbl VALUES
 ({d'2016-08-01'},'aaa')
,({d'2016-08-31'},'aaa')
,({d'2016-08-31'},'bbb')
,({d'2016-09-01'},'aaa')
,({d'2016-09-02'},'bbb');

WITH PartitionedCounted AS
(
    SELECT ROW_NUMBER() OVER(PARTITION BY YourObjekt,YearAndMonth ORDER BY YourDate) AS Nr
          ,YearAndMonth
          ,YourDate
          ,YourObjekt
    FROM @tbl AS tbl
    CROSS APPLY(SELECT CONVERT(VARCHAR(7),YourDate,102) AS YearAndMonth) AS A
)
SELECT pc.YearAndMonth,pc.YourObjekt,tbl.YourDate
FROM PartitionedCounted AS pc
INNER JOIN @tbl AS tbl ON tbl.YourObjekt=pc.YourObjekt AND CONVERT(VARCHAR(7),tbl.YourDate,102)=pc.YearAndMonth
WHERE pc.Nr > 1
使现代化 由于您使用的是SQL Server 2014,因此您可以使用EOMOUNT:


您可以这样尝试:

DECLARE @tbl TABLE(YourDate DATE,YourObjekt VARCHAR(100));

INSERT INTO @tbl VALUES
 ({d'2016-08-01'},'aaa')
,({d'2016-08-31'},'aaa')
,({d'2016-08-31'},'bbb')
,({d'2016-09-01'},'aaa')
,({d'2016-09-02'},'bbb');

WITH PartitionedCounted AS
(
    SELECT ROW_NUMBER() OVER(PARTITION BY YourObjekt,YearAndMonth ORDER BY YourDate) AS Nr
          ,YearAndMonth
          ,YourDate
          ,YourObjekt
    FROM @tbl AS tbl
    CROSS APPLY(SELECT CONVERT(VARCHAR(7),YourDate,102) AS YearAndMonth) AS A
)
SELECT pc.YearAndMonth,pc.YourObjekt,tbl.YourDate
FROM PartitionedCounted AS pc
INNER JOIN @tbl AS tbl ON tbl.YourObjekt=pc.YourObjekt AND CONVERT(VARCHAR(7),tbl.YourDate,102)=pc.YearAndMonth
WHERE pc.Nr > 1
使现代化 由于您使用的是SQL Server 2014,因此您可以使用EOMOUNT:


不确定我是否遗漏了什么!您希望在一年中的一个月内任何类型的>1

SELECT objekt,year(datum),month(datum),count(*) as counter
FROM tempt_report
GROUP BY objekt, year(datum),month(datum)
HAVING count(*)>1

不确定我是否遗漏了什么!您希望在一年中的一个月内任何类型的>1

SELECT objekt,year(datum),month(datum),count(*) as counter
FROM tempt_report
GROUP BY objekt, year(datum),month(datum)
HAVING count(*)>1


数据类型是DATETIME吗?@Arulkumar它是DateServer的哪个版本?SQL 2014。数据类型是DATETIME吗?@Arulkumar它是DateServer的哪个版本?SQL 2014。这是事实的一半。我用这种方法得到的只是对象列,而不是基准列。我稍微清理了一下。希望它能解决所有问题。这是事实的一半。我用这种方法得到的只是对象列,而不是基准列。我稍微清理了一下。希望一切都好。嗨!我试过了,我得到了三列数据,数据只是一年的格式。。。它是2025年:选择DateNameMONTH、DateAddMONTH、MONTHDatum、0-1+“”+CONVERTnvarchar、YEARDatum作为基准,objekt、COUNT1按objekt、YEARDatum、COUNT1>1 Hi的MONTHDatum从Test_报告组中选择。很抱歉。它会为你工作的嗨!我试过了,我得到了三列数据,数据只是一年的格式。。。它是2025年:选择DateNameMONTH、DateAddMONTH、MONTHDatum、0-1+“”+CONVERTnvarchar、YEARDatum作为基准,objekt、COUNT1按objekt、YEARDatum、COUNT1>1 Hi的MONTHDatum从Test_报告组中选择。很抱歉。这对你会有用的。这看起来很不错,显然很有效,比预期的要好。然而,我有一个小麻烦,以解决它根据我的要求。你能注意到错误吗?最后,这就是我的工作方式:再次感谢您显示初始日期,尽管它不是预期的结果!:这看起来很不错,显然很有效,比预期的要好。然而,我有一个小麻烦,以解决它根据我的要求。你能注意到错误吗?最后,这就是我的工作方式:再次感谢您显示初始日期,尽管它不是预期的结果!:确切地简单又小!:编辑:实际上,您只给出一个result pro对象,而不是需要的两个。但是,好的一点是:完全正确!简单又小!:编辑:实际上,您只给出一个result pro对象,而不是需要的两个。但是,好的一点是: