2014-07-18 106 views
3

我有這樣的SQL查詢:GROUP BY多個值在同一列

select prefix, code, stat, complete, COUNT(*) as Count 
from table 
group by prefix, code, stat, complete 
order by prefix, code, stat, complete 

列 '前綴' 是字母數字值(0-9A-ZA-Z)。 我想要的是,使得如果前綴的值是一個數字,使數字等於0.如果它是一個字母,它會保持它的價值。我試圖通過子句添加組下的以下行:

(case when prefix like '%[0-9]%' then 0 else prefix end) 

但我得到一個錯誤「轉換爲varchar值‘J’爲int數據類型時,轉換失敗。」

什麼是造成此錯誤?我怎樣才能讓'前綴'列顯示0或一個字母?

+2

你可以添加sqlfiddle數據樣本? – Horaciux

回答

6
case when prefix like '%[0-9]%' then '0' else prefix end 

你顯然還需要將此作爲GROUP BY表達:

select 
    NewPrefix = case when prefix like '%[0-9]%' then '0' else prefix end, 
    code, 
    stat, 
    complete, 
    COUNT(*) as Count 
from table 
group by 
    case when prefix like '%[0-9]%' then '0' else prefix end, 
    code, stat, complete 
order by 
    case when prefix like '%[0-9]%' then '0' else prefix end, 
    code, stat, complete 
+0

太棒了!一旦我從選擇部分中刪除了「prefix =」部分,這就工作了!謝謝! – Ultracoustic

0

如果前綴可以有不止一個字符,那麼你可能想是這樣的:

(case when prefix not like '%[^0-9]%' then '0' else prefix end) 

或:

(case when isnumeric(prefix) = 1 then '0' else prefix end) 
+0

第二條語句的工作原理是給定varchar中的前綴列,即字母數字值並且沒有轉換?我們無法在字母數字列 – Recursive

+0

@anand上運行數字轉換。 。 。 'isnumeric()'將一個字符串作爲參數。 –

+0

但似乎沒有什麼限制(鏈接在我的答案中)。感謝信息 – Recursive

1

試試這個:

select case when prefix not like '%[^0-9]%' then prefix else '0' end as prefix, code, stat, complete, COUNT(*) as Count 
from table 
group by case when prefix not like '%[^0-9]%' then prefix else '0' end, code, stat, complete 
order by prefix, code, stat, complete 

Check This. Looks similar "ISNUMERIC()"

-1

我只是做的工作是這樣的。

select case when isnumeric(prefix) = '1' then '0' else prefix end as BEST_ANSWER 
, code 
, stat 
, complete 
, COUNT(*) as Count 
from table 
group by prefix, code, stat, complete 
order by prefix, code, stat, complete 

ISNUMERIC是一個TSQL函數,測試它是否是一個有效的數字,如果是則返回1.此案聲明說,如果它等於1,使它成爲一個零,否則返回原來的價值。順便說一句,你想遠離「喜歡」,因爲它對性能不利。

+1

嘗試選擇isnumeric('1E00'):不是你可能期望的.... –

+1

不僅僅是你將數字和字符串混合在一起,它只會拋出原來的'轉換失敗'錯誤。 –

+1

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –