0

我在 ODBC 连接上通过 MS Query 运行以下查询:

SELECT oa_cstexpbal_0.costcentre, oa_cstexpbal_0.expensecode, oa_cstexpbal_0.yearno,
oa_cstexpbal_0.baltype, oa_cstexpbal_0.openbal, oa_cstexpbal_0.periodbal
FROM OPENACC.PUB.oa_cstexpbal oa_cstexpbal_0
WHERE (oa_cstexpbal_0.yearno='2016') AND (oa_cstexpbal_0.baltype='AV')

并将以下数据返回到 periodbal 的一列中:

406186.06;317084.39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0

有没有办法可以分离出 periodbal 数据以阻止它以逗号分隔的形式出现?

我正在连接到一个 sql 2008 Db 调用 OPENACC.PUB 并使用原始查询来提取数据。唯一用 a 重新调整的列是;periodbal。当转储到 excel 中时,可以通过 Text To Columns 进行更正,但理想情况下,我想尝试在查询中执行此操作(如果可能)。

4

1 回答 1

0

假设您使用 MS SQL Server,您希望将列中以分号分隔的数据拆分为行,以便在 SQL 中处理它们。

如果这是正确的,那么您需要拆分它们。由于默认情况下 SQL Server 无法执行此操作,因此您有多种方法可以执行此操作。

有关一些一般信息,请参阅此帖子http://sqlperformance.com/2012/07/t-sql-queries/split-strings

在这里https://codereview.stackexchange.com/questions/15125/sql-server-split-function-optimized我发布了一个拆分函数,它也适用于 SQL。

所以一种方法可以是:

SELECT oa_cstexpbal_0.costcentre
  , oa_cstexpbal_0.expensecode
  , oa_cstexpbal_0.yearno
  , oa_cstexpbal_0.baltype
  , oa_cstexpbal_0.openbal
  , oa_cstexpbal_0.periodbal
  , s.value AS periodbal_as_rows
FROM OPENACC.PUB.oa_cstexpbal oa_cstexpbal_0
CROSS APPLY dbo.fn_Split(oa_cstexpbal_0.periodbal,';') AS s
WHERE (oa_cstexpbal_0.yearno='2016') AND (oa_cstexpbal_0.baltype='AV')
于 2014-11-27T13:50:39.930 回答