SQL Query将数据分成两个字段

时间:2009-07-02 14:21:40

标签: sql sql-server

我在一列中有数据要分成两列。如果存在,数据用逗号分隔。该字段没有数据,只有一组数据或两组数据由逗号分隔。目前我将数据拉出并保存为逗号分隔文件,然后使用FoxPro将数据加载到表中,然后根据需要处理数据,然后将数据重新插入到不同的SQL表中供我使用。我想删除FoxPro部分并让SQL查询为我分配数据。下面是数据的样本。

Store   Amount  Discount
1       5.95    
1       5.95    PO^-479^2
1       5.95    PO^-479^2
2       5.95    
2       5.95    PO^-479^2
2       5.95    +CA8A09^-240^4,CORDRC^-239^7
3       5.95    
3       5.95    +CA8A09^-240^4,CORDRC^-239^7
3       5.95    +CA8A09^-240^4,CORDRC^-239^7

在上面的数据中,我想总结金额字段中的数据以获得总金额。然后取出位于克拉字符之间的特定折扣金额并将其相加以获得总折扣金额。然后将两者加在一起,得到总净额。我想写的查询将根据需要分开折扣字段,请参阅存储2第3行以应用两个折扣,然后拉出克拉字符之间的值。

4 个答案:

答案 0 :(得分:0)

对于SQL Server: 您可以在sql语句中使用ChardIndex(',',fieldname)来查找逗号的位置,然后使用Substring来解析第一个和第二个字段。

答案 1 :(得分:0)

对于Oracle,您可以在select子句中使用这样的case语句。在两个折扣中分别使用一个:

CASE WHEN LENGTH(foo.discount) > 0 AND INSTR(foo.discount,',') > 0 THEN
SUBSTR(foo.discount,1,INSTR(foo.discount,',',1,1)) ELSE foo.discount END AS discount_column_1

答案 2 :(得分:0)

我终于弄明白了如何根据需要分离字段。下面是将折扣字段分为两部分的代码。我现在可以根据需要分离字段并将分离的数据插入到临时表中,然后使用类似的代码集来提取克拉字符所包含的确切数量。感谢上面两个答案的帮助。我结合使用两者来得到我需要的东西。

CASE LEN(X.DISCOUNT)-LEN(REPLACE(X.DISCOUNT,',',''))
    WHEN 1 THEN SUBSTRING(X.DISCOUNT,1,CHARINDEX(',',X.DISCOUNT)-1)
    ELSE X.DISCOUNT     
END 'FIRST_DISCOUNT',
CASE LEN(X.DISCOUNT)-LEN(REPLACE(X.DISCOUNT,',',''))
    WHEN 1 THEN SUBSTRING(X.DISCOUNT,CHARINDEX(',',X.DISCOUNT)+1,LEN(X.DISCOUNT)-CHARINDEX(',',X.DISCOUNT)+1)
    ELSE ''
END 'SECOND_DISCOUNT'

答案 3 :(得分:0)

此替代解决方案使用LEFTRIGHT函数来拆分列。

select Store, Amount,
Discount1 = CASE 
    WHEN CHARINDEX(',',Discount) > 1 THEN LEFT(Discount, CHARINDEX(',',Discount)-1 ) 
    ELSE Discount END,
Discount2 = CASE 
    WHEN CHARINDEX(',',Discount) > 1 THEN RIGHT(Discount, LEN(Discount) - CHARINDEX(',',Discount)-1 ) 
    END
from @Temp