0

これは少しばかげているように聞こえるかもしれませんが、クエリで返された行の総数を数えようとしています。私は COUNT() を無駄にしようとしました。これまでのところ、私はこのクエリを持っています:

SELECT DISTINCT
    a.*  
    , LEVEL AS n
    , count(wipdatavalue) as total
FROM
(
  SELECT
    WIPDATAVALUE
    , CONTAINERNAME
    , una
    , dulo
    , (dulo - una) + 1 AS m
  FROM
  (
    SELECT 
      WIPDATAVALUE
      , CONTAINERNAME
      , CASE
          WHEN INSTR(wipdatavalue, '-') = 0 THEN
            wipdatavalue
          ELSE
            SUBSTR(wipdatavalue, 1, INSTR(wipdatavalue, '-')-1) 
         END AS una
      , CASE
          WHEN INSTR(wipdatavalue, '-') = 0 THEN
            wipdatavalue
          ELSE
            SUBSTR(wipdatavalue, INSTR(wipdatavalue, '-') + 1)
         END AS dulo
    FROM trprinting
    WHERE containername = '8PB842613'
  )
)A CONNECT BY LEVEL <= m
GROUP BY
  WIPDATAVALUE
    , CONTAINERNAME
    , una
    , dulo
    , m
    , LEVEL
ORDER BY N;

ここに画像の説明を入力

また、N フィールドを 1 から 8 にしようとしています。これが正しい出力になるはずだからです。前もって感謝します。私はあなたたちが役に立つことを知っています:)

4

1 に答える 1

0

あなたは次のようなことをしたいでしょう:

with data (wipdatavalue, containername, una, dulo, m, n)
     as (select wipdatavalue,containername,una,dulo,( dulo - una ) + 1 as m,una n
           from (select wipdatavalue,containername,
                        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
                  where containername = '8PB842613')
         union all
         select wipdatavalue,containername,una,dulo,m,n + 1
           from data
          where n + 1 <= dulo)
select wipdatavalue,containername,una,dulo,m,n,
       count(*) over () total_rows
  from data
 order by wipdatavalue,n; 

フィドル: http://sqlfiddle.com/#!4/11082/2

于 2013-03-05T08:14:34.933 に答える