2015-12-15 116 views
0

我這裏有這個表,除了PIVOT之外,還有其他的方法嗎?

選項

ID  sType hValue 
1  Late 10 
2  NSF  20 

現在我想的是,一個單一的查詢來獲取輸出象下面這樣:

Late NSF 
10 20 

2與單獨的列他們各自的h值(單行)。並且應該有單獨的列名,以便我可以使用此查詢與其他一些數據進行連接。

我試過了病例陳述但顯然它不工作。它給了我2個獨立的行,每列有1個NULL值。

select Case when sType = 'Late' Then hValue End late, 
Case When sType='NSF' Then hValue End nsf 
from Options 
where sType IN ('Late', 'NSF') 
+1

它是什麼數據庫系統? – Szymon

回答

2

在上面添加Max總您case聲明

SELECT MAX(CASE WHEN sType = 'Late' THEN hValue END) late, 
     MAX(CASE WHEN sType = 'NSF' THEN hValue END) nsf 
FROM Options 
WHERE sType IN ('Late', 'NSF') 

考慮到您的'Late''NSF'不會被複制

+0

@TimBiegeleisen - 謝謝:) –

0

或者用醜陋的硬編碼子查詢的,但它是簡單

SELECT 
    (SELECT hValue FROM Options WHERE sType = 'Late') AS Late, 
    (SELECT hValue FROM Options WHERE sType = 'NSF') AS NSF 
+0

長時間工作的表格最多隻有最後一行和一個NSF行。 – jarlh

0

如果這是SQL Server,則可以使用動態查詢。對於超過2條記錄,這將工作得很好,並且沒有值被硬編碼。

declare @sql as nvarchar(max) = N'select ' 
select @sql = @sql + cast(hValue as nvarchar(50)) + ' as ' + '''' + sType + ''', ' 
from Options 

if len(@sql) > 2 
    set @sql = left(@sql, len(@sql) - 1) 

exec sp_executesql @sql 

SQL Fiddle

您可能需要修改查詢略有我假設的數據類型。

如果您需要進一步加入輸出,可以將其轉儲到臨時表中。

0

PIVOT只是一些其他SQL語句的快捷方式。在大多數情況下,PIVOT聲明

-- Copied from T-SQL 2012 Fundamental. 
SELECT ... 
FROM <source_table_or_table_expression> 
PIVOT(<agg_func>(<aggregation_element>) 
FOR <spreading_element> 
IN (<list_of_target_columns>)) AS <result_table_alias>; 

它可以轉換爲

SELECT pass_through_columns, 
    <agg_func>(CASE WHEN <spreading_element> = '<target_columns1>' WHEN aggregation_element END) AS target_column1, 
    <agg_func>(CASE WHEN <spreading_element> = '<target_columns2>' WHEN aggregation_element END) AS target_column2, 
    ... 
FROM <source_table_or_table_expression> 
GROUP BY pass_through_columns; 

沒有聚合函數你不能談論PIVOT。在你的情況下,嘗試

select MAX(Case when sType = 'Late' Then hValue End) AS late, 
MAX(Case When sType='NSF' Then hValue End) nsf 
from Options 
where sType IN ('Late', 'NSF') 

有可能是每個spreading_element(晚,NSF),這使得MAX多餘的獨特價值,但它並非總是如此。

相關問題