我有一个Select
查询:
SELECT
SAMPLE_NUMBER, SAMPLE_TYPE, STORAGE_ADDRESS, EXTERNAL_NUMBER
FROM
SYSTMX2.TM2_SAMPLES
我需要的是添加两个包含.Net语法代码结果的列,这样我最终会得到类似"
的内容SELECT
SAMPLE_NUMBER, SAMPLE_TYPE, STORAGE_ADDRESS, EXTERNAL_NUMBER,
SomeCodearound(STORAGE_ADDRESS) as RowPosition,
SomeCodearound(STORAGE_ADDRESS) as ColumnPosition
FROM
SYSTMX2.TM2_SAMPLES
行和列位置取决于它们落入9 x 9网格的位置。顶部有9个数字,侧面有9个数字。这将是一个可容纳81个小瓶的实验室标本盒。每个样品瓶的编号从1到81,是STORAGE_ADDRESS
值的最后三个字符,类似于FR2-S01-R01-001或FR2-S01-R01-081。样品瓶编号1将在第1列和第1行;第9行第9列中的样品瓶81.该行的.net代码是取STORAGE_ADDRESS
的最后三个字符并使用小数进行测试。
TryParse(STORAGE_ADDRESS.Substring(STORAGE_ADDRESS.Length - 3), value)
然后获取该值并转换为:
CInt(Decimal.Truncate(((value+ 9 - 1) / 9))).
列代码是:
(value + 9) - (CInt(Decimal.Truncate(((value + 9 - 1) / 9))) * 9).
我需要将它变成一个内联Select
语句,我可以从Web服务调用到Oracle服务器,我没有任何方法可以创建任何数据库端。现在我所做的是调用结果记录集添加几列并循环结果并添加值。我知道必须有更好的方法。
答案 0 :(得分:1)
此Oracle查询返回行和列位置:
select storage_address,
floor((to_number(substr(storage_address, 13, 3))-1)/9)+1 rowposition,
mod(to_number(substr(storage_address, 13, 3))-1, 9)+1 colpostion
from t
以下是SQLFiddle,其中包含测试值。