我有一列中的数据,我想将其分成两列。如果数据存在,则用逗号分隔。此字段可以没有数据,可以只有一组数据,也可以有两组由逗号表示的数据。目前,我提取数据并保存为逗号分隔的文件,然后使用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行以了解正在应用的两个折扣,然后提取克拉字符之间的值。
发布于 2009-07-02 14:32:39
对于SQL Server:您可以在sql语句中使用ChardIndex(',',fieldname)来查找逗号的位置,然后使用子字符串来解析出第一个和第二个字段。
发布于 2009-07-02 14:33:43
对于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发布于 2009-07-02 15:09:02
我最终弄清楚了如何在我需要的时候分隔字段。下面是将折扣字段一分为二的代码。现在,我可以根据需要分隔字段,并将分隔的数据插入到临时表中,然后使用一组类似的代码提取由克拉字符包围的确切数量。感谢你在上面两个答案中的帮助。我使用了两者的组合来得到我需要的东西。
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'https://stackoverflow.com/questions/1074677
复制相似问题