1

検索を確認しましたが、この質問に答える人はいないようです。ただし、非常に単純であると思います。2列になるクエリがありますが、2行になるクエリが必要です。

これはクエリです:

               SELECT        (SELECT        COUNT(Id) AS Expr1
                      FROM            Table
                      WHERE        (Description LIKE 'door%')) AS Door,
                         (SELECT        COUNT(Id) AS Expr1
                           FROM            Table AS Table_1
                           WHERE        (Description LIKE 'window%')) AS Window

私が得る結果は(もちろん):

[Door]     [Window]
56         34

私が欲しいと思う結果は次のとおりです。

[OPTION]    [NROfRecords]
Door        56
Window      34

何か案は?前もって感謝します!

4

4 に答える 4

2

を使用できますUNPIVOTが、クエリを以下に書き直すことをお勧めします。

select *
from
(
  SELECT 
    sum(case when Description LIKE 'door%' then 1 else 0 end) Door,
    sum(case when Description LIKE 'window%' then 1 else 0 end) Window
  from Table1
) x
unpivot
(
  NrOfRecords
  for [Option] in (Door,  Window)
) u

SQL FiddlewithDemoを参照してください

于 2012-10-15T10:49:47.467 に答える
1
SELECT 'Door'   AS Option, COUNT(id) FROM table WHERE description LIKE 'door%'
UNION ALL
SELECT 'Window' AS Option, COUNT(id) FROM table WHERE description LIKE 'window%'

また...

WITH
  filtered AS
(
  SELECT
    CASE WHEN description LIKE 'door%'   THEN 'Door'
         WHEN description LIKE 'window%' THEN 'Window'
                                         ELSE 'Other' END AS option,
    *
  FROM
    yourTable
  WHERE
       description LIKE 'door%'
    OR description LIKE 'window%'
)
SELECT
  option,
  COUNT(id)
FROM
  filtered
GROUP BY
  option

または...

SELECT
  lookup.option,
  COUNT(id)
FROM
(
  SELECT 'door'   AS option
  UNION ALL
  SELECT 'window' AS option
)
  AS lookup
INNER JOIN
  yourTable
    ON yourTable.description LIKE lookup.option + '%'
GROUP BY
  lookup.option
于 2012-10-15T10:47:29.473 に答える
0
select 
    case when description like 'door%' then 'door'
         when description like 'window%' then 'window' 
         else '' 
    end as [desc],
    count(id)
from table
where description like 'door%' or description like 'window%'
group by 
(
    case when description like 'door%' then 'door'
    when description like 'window%' then 'window' else '' end
)
于 2012-10-15T10:47:58.650 に答える
-1

このような解決策は、DRYの原則に従っています。ドアや窓をどこにも繰り返さないでください。ここに別のエンティティを追加するのも簡単なので、ロジックを繰り返さないでください。

select
    C.description,
    count(*)
from Table1 as t
    inner join (
        select 'door%', 'Door' union all
        select 'window%', 'Window'
    ) as C(pattern, description) on t.description like c.pattern
group by C.description

sql fiddle demo

于 2012-10-15T10:48:17.293 に答える