将数据分隔为两个字段的SQL查询

将数据分隔为两个字段的SQL查询,sql,sql-server,Sql,Sql Server,我想将一列中的数据分成两列。数据用逗号分隔(如果存在)。此字段不能有数据,只能有一组数据或两组由逗号表示的数据。目前,我提取数据并保存为逗号分隔的文件,然后使用FoxPro将数据加载到表中,然后根据需要处理数据,然后将数据重新插入另一个SQL表中以供使用。我想删除FoxPro部分,让SQL查询为我生成数据。下面是数据的示例 Store Amount Discount 1 5.95 1 5.95 PO^-479^2 1 5.95 PO^

我想将一列中的数据分成两列。数据用逗号分隔(如果存在)。此字段不能有数据,只能有一组数据或两组由逗号表示的数据。目前,我提取数据并保存为逗号分隔的文件,然后使用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
在上面的数据中,我想对amount字段中的数据求和,得到一个总额。然后拉出位于克拉字符之间的具体折扣金额,并将其相加,得到总折扣金额。然后将两者相加,得到总净额。我要编写的查询将根据需要分隔折扣字段,有关应用的两个折扣,请参见store 2第3行,然后提取克拉字符之间的值。

对于SQL Server:
可以在sql语句中使用ChardIndex(“,”,fieldname)查找逗号的位置,然后使用子字符串解析出第一个和第二个字段

对于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

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

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'

此替代解决方案使用
LEFT
RIGHT
函数拆分列

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

我没有意识到人们仍然使用Fox Pro.birdlips——我使用的是SQLserver。pjp-我实际上已经使用FoxPro一段时间了,我很喜欢它。我喜欢.net组,偶尔也会使用它,但对于我的大多数需求,FoxPro是最好的选择。