db2 with語句之外嵌套select


有人知道怎么寫嗎
我先說一下我的情況,我現在用with語句查出來一個結果了,但是我想要把結果的行轉列,所以我想要在外面嵌套一個select,但是我把with語句引住后報錯,說什么with as的as不能用,有沒有人知道~
謝謝

30 个解决方案

#1


建立查詢(WITH AS)
再 SELECT * FROM 查詢

#2


with 外面不能再套一層查詢
你的查詢可以在with后面寫

#3


不能再嵌套了。 你想實現什么功能?考慮一下變通的實現方法以實現相同的結果。

#4


引用 2 樓 zhaojianmi1 的回復:
with 外面不能再套一層查詢
你的查詢可以在with后面寫


嗯  我with出一個結果后想把結果的列和行 翻轉過來  請問你有什么辦法嗎  我現在是在with前面列轉換,報錯

#5


引用 3 樓 acmain_chm 的回復:
不能再嵌套了。 你想實現什么功能?考慮一下變通的實現方法以實現相同的結果。

我想把with出來的結果 列和行轉換一下,還請您幫幫忙,看有什么解決辦法~

#6


建立查詢(WITH AS)
再 SELECT * FROM 查詢
是否可行

#7


with。。。

select。。。

在后面這個select里轉

#8


引用 6 樓 wwwwa 的回復:
建立查詢(WITH AS)
再 SELECT * FROM 查詢
是否可行

好像是不可行,報錯  我就是那么寫的,報with那個表后的as不對 就比如 with temp as(select *****) 就這個as報錯

#9


引用 7 樓 zhaojianmi1 的回復:
with。。。

select。。。

在后面這個select里轉

我現在是with temp as (子查詢)已經select了,寫了好幾百行sql了 這個破報表

#10


我現在用with語句查出來一個結果了:
WITH 的代碼是什么

#11


囧 剛才回復的時候想通了,不把with那語句擴上,謝謝各位的回答,但是我現在的SQL效率非常不高,在一個400W條的數據里生成一些報表數據,居然用了4分鍾。。。 我用了 where in ()
誰能優化一下~~~

#12


在查詢字段上建立索引沒有,將where in ()->INNER JOIN

#13


引用 11 樓 liubey_zff 的回復:
囧 剛才回復的時候想通了,不把with那語句擴上,謝謝各位的回答,但是我現在的SQL效率非常不高,在一個400W條的數據里生成一些報表數據,居然用了4分鍾。。。 我用了 where in ()
誰能優化一下~~~
方案可行,然后要看看索引什么的來提高效率

#14


引用 12 樓 wwwwa 的回復:
在查詢字段上建立索引沒有,將where in ()->INNER JOIN

我的查詢大概是這個樣子的
select bankName,余額 from tableName where 機構 in ('00011','00012')
這樣的,可以用你說的INNER JOIN改嗎

而且我不止這一條select語句
因為一次要統計好幾個bankName,所以我整個語句里面select bankName,余額 from tableName where 機構 in ('00011','00012')
這句話重復了好幾次

#15


引用 13 樓 zhaojianmi1 的回復:
引用 11 樓 liubey_zff 的回復:
囧 剛才回復的時候想通了,不把with那語句擴上,謝謝各位的回答,但是我現在的SQL效率非常不高,在一個400W條的數據里生成一些報表數據,居然用了4分鍾。。。 我用了 where in ()
誰能優化一下~~~
方案可行,然后要看看索引什么的來提高效率

正在想提高效率的事~,您能幫着看看嘛 我大概在14樓說了一下

#16


把整個查詢拿出來看看

#17


語句太多了 囧  我發到我博客上 麻煩你點擊看一下子~ 謝謝

#18


with如果整不順了 弄個視圖吧

#19


http://liubey.javaeye.com/blog/929481
這個是SQL語句

#20


這樣的查詢肯定慢啊

#21


能不能加兩個冗余字段事先預處理好,bankname和固定金額段

#22


引用 21 樓 zhaojianmi1 的回復:
能不能加兩個冗余字段事先預處理好,bankname和固定金額段

在哪個表里面加?存款表是肯定不行了,那個表不能動~麻煩你幫着參謀參謀 我是崩潰了 555

#23


那沒法加了,你再仔細想想吧,不要崩潰

#24


SELECT 'bankName15' as bankName,   
    CASE    
        WHEN 余額 >200000  and 余額<=500000   THEN 1   
        WHEN 余額 >500000  and 余額<=1000000  THEN 2   
        WHEN 余額 >1000000 and 余額<=2000000  THEN 3   
        WHEN 余額 >2000000 and 余額<=5000000  THEN 4   
        WHEN 余額 >5000000                  THEN 5      
    END as conditions   
, Count(*) as peoplenum   
FROM 存款臨時表 where 機構編碼 in (“一些機構號”)   
GROUP BY    
    CASE    
        WHEN 余額 >200000  and 余額<=500000   THEN 1   
        WHEN 余額 >500000  and 余額<=1000000  THEN 2   
        WHEN 余額 >1000000 and 余額<=2000000  THEN 3   
        WHEN 余額 >2000000 and 余額<=5000000  THEN 4   
        WHEN 余額 >5000000                  THEN 5    
    END    

除了in (“一些機構號”)  中的機構號不同,其它的都相同,如果格式是固定的,可以考慮用SP,
將機構號存入表中,打開游標循環取值,動態生成SQL語句再執行,將結果存入1個臨時表中,再對
這個臨時表進行操作

#25


引用 24 樓 wwwwb 的回復:
SELECT 'bankName15' as bankName,  
  CASE  
  WHEN 余額 >200000 and 余額<=500000 THEN 1  
  WHEN 余額 >500000 and 余額<=1000000 THEN 2  
  WHEN 余額 >1000000 and 余額<=2000000 THEN 3  
  WHEN 余額 >2000000 and……

存儲過程我一直沒有用過,那東西是跟變量似的嗎?用完就消失嗎?以前實驗過,一直沒成功,具體我可能也不知道怎么寫,您有時間能幫我寫一下嗎
我可以另外開一個帖子給你100分,分到無所謂,我就是想知道存儲過程到底怎么寫。

#26


存儲過程我一直沒有用過,那東西是跟變量似的嗎?用完就消失嗎?
不是,類似程序,可以重復調用

#27


引用 26 樓 wwwwb 的回復:
存儲過程我一直沒有用過,那東西是跟變量似的嗎?用完就消失嗎?
不是,類似程序,可以重復調用

那您能看着我的那個程序幫我寫一個嗎?謝謝你拉~

#28


15 個 union, 這 15 個 bank 和對應的 機構號是否能直接從一個表中取?如果能直接 join 就不用寫 15 次了。

如果沒有這15個 bank 和機構的對應表,那造一個 with 臨時表來也行,至少不用 union 15 次。
當然這不能適應參數化的報表,如果這個機構號是由參數傳進來的和批機構而不是一個或不能 hardcode 在 SQL 里面的就沒有辦法了,還得有個真實的對照表。



with 存款臨時表(機構編碼,余額) as   (
    select 機構編碼,余額 from 存款表 where 余額>200000 

, 機構對照表 as (
    select 'bankName1' as BankName, '機構號1' as BranchCode from sysibm.sysdummy1  
    union all
    select 'bankName1' as BankName, '機構號2' as BranchCode from sysibm.sysdummy1  
    union all
    select 'bankName2' as BankName, '機構號3' as BranchCode from sysibm.sysdummy1  
    ...
)
然后再接着寫一遍就好了。

#29


1樓說的方法都很對了

#30


該回復於2011-03-28 16:21:01被版主刪除

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com