2014-11-17 114 views
0

全部, 需要其中一个sql查询的帮助。我有一个查询,它在排序顺序上拉起记录。具有排序顺序的SQL查询

Select * from 
(select count(*) cnt, customer_cd, smallint(Rank() Over(Order by count(8) Desc)) as rnk 
from table.customer 

现在,结果显示像,

Cnt Customer Cd 
110 1- Retail 
90 2-Human resources 
20 3-Information Technology 
11 Not Standard 

我想从中取出描述,将只有客户代码,例如1,2,3,NS等任何帮助如何为了达成这个。 谢谢。

+0

是否“表中的‘客户’有场“customer_cd这样的描述?如果是的话,你也许能够连字符之前选定的一切。如果没有,哪里是说明从? –

+0

未来是的,描述在表中 – user3657257

+0

我们可能需要使用string和Locate函数,但不能确定 – user3657257

回答

0

假设你总是有一个连字符,你可以使用LOCATE来查找连字符的位置。然后,可以使用SUBSTRING获取LOCATE找到的位置之前的字符串部分。

select substring(customer_cd,0,locate('-',customer_cd)) 
from table.customer 

应该告诉你你会得到什么。

您似乎有一些根本没有代码的数据(例如“非标准”)。这些字段将会显示为空白。如果你想用一些特定的代码替换它,你可以使用CASE ... END表达式。

select CASE when locate('-',customer_cd)==0 then "" 
     else substring(customer_cd,0, locate('-',customer_cd)) END 
from table.customer 
+0

使用它我相信它会是SUBSTR,它显示的错误是:一个内置字符串函数的数字参数超出范围 – user3657257

+0

我的DB2版本同时支持SUBSTR()和SUBSTRING()。您可能需要一个case表达式,以便在未找到连字符时不使用SUBSTR()。 。 –

+0

This works。Cool。非常感谢。 – user3657257