簡體   English   中英

基於輸入列名稱的t-sql數據透視過濾器

[英]t-sql pivot filter based on input column name

基於以下AreaState表

Area    State
-------------------
A1  Active
A1  Active
A1  Active
A1  Proposed
A1  Proposed
A2  Active
A2  Proposed

我想編寫一個存儲的proc,它返回每個區域的狀態計數。 輸入到存儲的proc的是任何有效的State(在這種情況下,@ state是輸入參數)。 我希望下面的方法可以工作,但不能。

declare @state varchar(10)
set @state = 'Active'

select Area, QUOTENAME(@state)
from
(
  select Area, State from AreaState
) as src
pivot
(
   count(State) for State in (QUOTENAME(@state))
) as pvt

建議。

我在等待反饋時可能有錯誤的要求,但我認為您可以使用簡單的GROUP BY查詢。

碼:

SELECT Area, State, Count(*) as 'Count'
FROM x
GROUP BY Area, State

測試用例:

WITH x AS (
    SELECT 'A1' as Area, 'Active' as State
    UNION ALL
    SELECT 'A1' as Area, 'Active' as State
    UNION ALL
    SELECT 'A1' as Area, 'Active' as State
    UNION ALL
    SELECT 'A1' as Area, 'Proposed' as State
    UNION ALL
    SELECT 'A1' as Area, 'Proposed' as State
    UNION ALL
    SELECT 'A2' as Area, 'Active' as State
    UNION ALL
    SELECT 'A2' as Area, 'Proposed' as State
)
SELECT Area, State, Count(*) as 'Count'
FROM x
GROUP BY Area, State

輸出:

Area    State      Count
------------------------
A1      Active     3
A1      Proposed   2
A2      Active     1
A2      Proposed   1

我不確定這是否是最佳方法,但確實可以解決問題。

declare @state varchar(20)
set @state = 'Proposed'

create table #tt_Result
(
  Area varchar(max),
  [Active] int,
  [Proposed] int
)

insert into #tt_Result
select Area, [Active], [Proposed]
from
(
  select Area, State from AreaState
) as src
pivot
(
   count(State) for State in ([Active], [Proposed])
) as pvt

select Area, 
case
  when @state = 'Active' then [Active]
  when @state = 'Proposed' then [Proposed]
end as [Count]
from #tt_Result

drop table #tt_Result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM