2

以前にこの質問をしましたが、回答はありましたが、私が知る限り、CF QoQ はそのCASE声明をサポートしていないため、私の問題は実際には解決されませんでした。

ここに他の質問があります:背景

SQLでステートメントを使用せずに、私がやろうとしていることを達成するためのより簡単な方法はありますCASEか、それとも最初に思いついたユニオンスタイルの答えに戻る必要がありますか?

これは私が思いついたものです:

<cfquery name="range1" dbtype="query">
    select count(col1) as cnt
    from tbl1
    where col1 <= 15000
</cfquery>
<cfquery name="range2" dbtype="query">
    select count(col1) as cnt
    from tbl1
    where col1 <= 30000
</cfquery>
<cfquery name="range3" dbtype="query">
    select count(col1) as cnt
    from tbl1
    where col1 <= 45000
</cfquery>
<cfquery name="range4" dbtype="query">
    select count(col1) as cnt
    from tbl1
    where col1 <= 60000
</cfquery>
<cfquery name="range5" dbtype="query">
    select count(col1) as cnt
    from tbl1
    where col1 <= 75000
</cfquery>
<cfquery name="range6" dbtype="query">
    select count(col1) as cnt
    from tbl1
    where col1 > 75000
</cfquery>
4

1 に答える 1

4

ユニオン スタイルは適切ですが、実装が正しくない可能性があります。あなたはこれを持っています:

select count(col1) as range1
from tbl1
where col1 <= 15000
union
select count(col1) as range2
from tbl1
where col1 > 15001 and col1 <= 30000
etc...

それを実行すると、最終的に単一の列になり、各行が何を表しているかを判断できなくなります。このようなものが良いでしょう。

select 'less than 15000' range, count(col1) records
from tbl1
where col1 <= 15000
group by range
union
select '15001 to 30000' range, count(col1) as records
from tbl1
where col1 > 15001 and col1 <= 30000
group by range
etc...
于 2013-07-23T16:23:53.577 に答える