Sql 如何从同一个表中组合这两个查询?

Sql 如何从同一个表中组合这两个查询?,sql,coldfusion,Sql,Coldfusion,因为“ColdFusion不支持通过内部联接或外部联接子句进行联接” 我怎样才能将这两个查询结合起来,它们从哪里给我提供数据 过去的两个月 select starburst_dept_name, starburst_dept_average,MONTHLY_PAST_DATE from cse_reports_month where starburst_dept_name is not NULL and YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())

因为“ColdFusion不支持通过内部联接或外部联接子句进行联接” 我怎样才能将这两个查询结合起来,它们从哪里给我提供数据 过去的两个月

select starburst_dept_name, starburst_dept_average,MONTHLY_PAST_DATE
  from cse_reports_month
  where starburst_dept_name is not NULL
 and YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
    and    MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-1


      select starburst_dept_name, starburst_dept_average,MONTHLY_PAST_DATE
  from cse_reports_month
  where starburst_dept_name is not NULL
 and YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
    and    MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-2
我希望有一个查询将这两个问题结合起来,我将如何做到这一点,以便 在ColdFusion工作?
我想比较的是上个月的starburst\u dept\u average>2个月前的starburst\u dept\u average?

您可以使用SQL UNION语句组合这些查询结果。

只是澄清一下,CF仅在查询的查询(QoQ)中不支持内部联接和外部联接。cse_reports_month是查询的名称还是数据库表的名称?使用getdate()听起来像是一个常规的SQL查询,而不是QoQ

以下查询应根据您的原始逻辑工作:

SELECT starburst_dept_name, starburst_dept_average, MONTHLY_PAST_DATE
FROM   cse_reports_month
WHERE  starburst_dept_name is not NULL
AND    YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
AND    (
       MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-1 OR 
       MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-2
       )
但正如所指出的,这对1月和2月不起作用-您需要使用一些不同的日期比较运算符

根据您正试图显示的内容(以及每月的过去日期数据表示的内容),以下内容可能会起作用(您可能需要根据您的具体需要进行一些修改):


您是否询问如何在CF中合并2个查询对象?您关于连接的陈述是错误的。您可以在SQL中进行外部连接和内部连接,但不要使用自己的日期逻辑。上面的逻辑有缺陷,如果当前月份是1月或2月,则将失败,因为没有月份=0或月份=。另外,它对索引也不友好。更好的选择是使用实际日期值:
其中col>={janaryFirstInSomeYear}和col<{januaryfirstinstinomeyearplusone}
,用于查询@Bardware states之类的查询。这是SQL还是QoQ?经验法则:如果你可以用SQL或QoQ来做,就用SQL来做。您将获得更好的性能,SQL引擎可能会更好,并且可以处理成行的数据。谢谢,我甚至没有想到这一点,我认为“SQL”足够聪明,可以在1月或2月为我提供正确的数据。这似乎与以下内容类似:declare@today datetime set today='2015-1-22'选择DATEADD(month,-2,(today)),但仍可能需要更改IT数据库,按照您告诉他们的做,而不是按照您希望他们做的做;-)SQL表示在两个数字之间执行比较,因此这正是数据库所做的。如果要比较两个日期值,则需要使用正确的比较表达式。(编辑)如在您的其他线程中提到的那样,在正确性和性能方面更好。参见DaveJemison,您可以考虑修改您的答案以包含查询的工作版本。它将帮助下一个遇到此线程的人:)
SELECT starburst_dept_name, starburst_dept_average, MONTHLY_PAST_DATE
FROM   cse_reports_month
WHERE  starburst_dept_name is not NULL
AND    DATEDIFF(m,MONTHLY_PAST_DATE,getdate()) IN (1,2)