我將創建一個查詢,該查詢將用於在我們的項目中打印標籤,並且因爲標籤數量的計數基於字符串而很難找到。我做了一個查詢,看起來像這樣:在oracle查詢中複製行
SELECT
wipdatavalue
, containername
, l
, q as qtybox
, d
, qtyperbox AS q
, productname
, dt
, dsn
, CASE
WHEN instr(wipdatavalue, '-') = 0
THEN
to_number(wipdatavalue)
ELSE
to_number(substr(wipdatavalue, 1, instr(wipdatavalue, '-') - 1))
END AS una
, CASE
WHEN instr(wipdatavalue, '-') = 0
THEN
to_number(wipdatavalue)
ELSE
to_number(substr(wipdatavalue, instr(wipdatavalue, '-') + 1))
END AS dulo
, ROW_NUMBER() OVER (ORDER BY containername) AS n
, count(*) over() m
FROM trprinting_ls
WHERE containername = 'TRALTESTU0A'
GROUP BY wipdatavalue, containername, l, q, d, qtyperbox, productname, dt, dsn
ORDER BY wipdatavalue
上面的查詢將導致以下:
但實際上,我要顯示的第一項(Wipdatavalue 1-4)不僅一次,而是四次是這個樣子:
我試圖運行另一個查詢很好,但是當我嘗試將其加載到我們的項目中時,它不打印標籤。我們發現這是因爲WITH語句,我們不知道爲什麼。查詢是:
WITH DATA (WIPDATAVALUE, CONTAINERNAME, L, Q, D, QTYBOX, PRODUCTNAME, DT, una, dulo, m1, n)
AS (SELECT WIPDATAVALUE, CONTAINERNAME, L, Q, D, QTYBOX, PRODUCTNAME, DT, una, dulo,(dulo - una) + 1 AS m1,una n
FROM (SELECT WIPDATAVALUE, CONTAINERNAME, L, Q, D, QTYPERBOX AS QTYBOX, PRODUCTNAME, DT,
CASE
WHEN instr(wipdatavalue, '-') = 0
THEN
to_number(wipdatavalue)
ELSE
to_number(substr(wipdatavalue, 1, instr(wipdatavalue, '-') - 1))
END AS una,
CASE
WHEN instr(wipdatavalue, '-') = 0
THEN
to_number(wipdatavalue)
ELSE
to_number(substr(wipdatavalue, instr(wipdatavalue, '-') + 1))
END AS dulo
FROM trprinting_ls
WHERE containername = 'TRALTESTU0A'
)
UNION ALL
SELECT WIPDATAVALUE, CONTAINERNAME, L, Q, D, QTYBOX, PRODUCTNAME, DT, una, dulo, m1, n + 1
FROM DATA
WHERE n + 1 <= dulo)
SELECT WIPDATAVALUE, CONTAINERNAME, L, Q, D, QTYBOX, PRODUCTNAME, DT, una, dulo, n,
count(*) OVER() m
FROM DATA
ORDER BY n, wipdatavalue
謝謝你們幫忙。
請分享表結構和一些示例數據如果可能... – 2013-03-14 08:39:37
你好Vineet,我沒有訪問表結構。至於示例數據,我已經在上面的圖片上了。如果您需要其他東西,請告訴我。 – GianIsTheName 2013-03-14 08:44:45
爲什麼在第一個查詢中需要'group by'? recurcieve CTE(第二個查詢)只在oracle 11gR2中是你正在使用的 – 2013-03-14 08:46:22