欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
SQL Server數據庫和Oracle行轉列

SQL Server數據庫和Oracle行轉列的特殊方案描述

文章主要描述的是SQL Server數據庫和Oracle數據庫行轉列的一種比較典型操作方法,對于有些業(yè)務(wù)來(lái)說(shuō),數據在表中的存儲與其最終的Grid表現恰好相當于把源表倒轉,那么這個(gè)時(shí)候我們就碰到了如何把行轉化為列的問(wèn)題。

為了簡(jiǎn)化問(wèn)題,我們且看如下查詢(xún)出來(lái)的數據,您不必關(guān)心表的設計以及sql語(yǔ)句:

對于有些業(yè)務(wù)來(lái)說(shuō),數據在表中的存儲和其最終的Grid表現恰好相當于把源表倒轉,那么這個(gè)時(shí)候我們就碰到了如何把行轉化為列的問(wèn)題,為了簡(jiǎn)化問(wèn)題,我們且看如下查詢(xún)出來(lái)的數據,您不必關(guān)心表的設計以及sql語(yǔ)句:

假設用到的sql語(yǔ)句為:

SELECT [姓名],[時(shí)代],[金錢(qián)] FROM [test].[dbo].[people]

這個(gè)表存儲了兩個(gè)人在不同時(shí)代(時(shí)代是固定的三個(gè):年輕、中年和老年)擁有的金幣,其中:

張三在年輕、中年和老年時(shí)期分別擁有1000、5000、800個(gè)金幣;

李四在年輕、中年和老年時(shí)期分別擁有1200、6000、500個(gè)金幣。

現在我們想把兩人在不同階段擁有的金幣用類(lèi)似如下的表格來(lái)展現:

姓名 年輕 中年 老年

張三 1000 5000 800

李四 1200 6000 500

我們現在考慮用最簡(jiǎn)單和直接的辦法來(lái)實(shí)現,其實(shí)關(guān)鍵是如何創(chuàng )建那些需要增加的列,且如何設定其值,現在我們來(lái)創(chuàng )建“年輕”列,關(guān)鍵的問(wèn)題是,這一列的值如何設定?合法的邏輯應該是這樣:如果該行不是“年輕”時(shí)代,那么其“金錢(qián)”我們認為是0,那么sql語(yǔ)句如何寫(xiě)呢?

如果是用的SQL Server數據庫,那么肯定要用到case了:

case[時(shí)代] when '年輕' then [金錢(qián)] else 0 end as 年輕 或 case when[時(shí)代]= '年輕' then [金錢(qián)] else 0 end as 年輕

如果用的是oracle,那么要用到decode函數,decode(1+1,3,'錯',2,'是',5,'錯','都不滿(mǎn)足下返回的值'),這個(gè)函數將返回“是”,具體用法限于篇幅這里不再介紹,相信大家從這個(gè)式子可以大概了解到其意思,用decode創(chuàng )建“年輕”列的句子是:完整的sql語(yǔ)句如下所示:

decode(時(shí)代,'年輕',金錢(qián),0)) 年輕

SELECT [姓名],[時(shí)代],[金錢(qián)], 

case[時(shí)代] when '年輕' then [金錢(qián)] else 0 end as 年輕,

case[時(shí)代] when '中年' then [金錢(qián)] else 0 end as 中年,

case[時(shí)代] when '老年' then [金錢(qián)] else 0 end as 老年 

FROM [test].[dbo].[people] 

現在我們來(lái)看看其執行結果:

相信看到這個(gè)結果,大家都知道下一步該做什么,那就是分組:按姓名分組,并且對三個(gè)時(shí)代的金錢(qián)進(jìn)行求和:

select [姓名],sum([年輕]) as 年輕,sum([中年]) as 中年,sum([老年]) as 老年 from

(SELECT [姓名],[時(shí)代],[金錢(qián)], 

case[時(shí)代] when '年輕' then [金錢(qián)] else 0 end as 年輕,

case[時(shí)代] when '中年' then [金錢(qián)] else 0 end as 中年,

case[時(shí)代] when '老年' then [金錢(qián)] else 0 end as 老年 

FROM [test].[dbo].[people]) t

group by [姓名]

這里用到了子查詢(xún),是為了邏輯更清晰一點(diǎn),其實(shí)可以不用子查詢(xún);至于oracle下的sql語(yǔ)句,除了要使用decode之外,其余幾乎一致,本人正是在oracle中實(shí)現之后才研究了下SQL Server數據庫下的實(shí)現方式。

最后看看結果:

事實(shí)上,當列不固定的時(shí)候,比如除了“年輕”、“中年”、“老年”以外還有其他的未知的時(shí)代,實(shí)現思路其實(shí)基本一致,只是需要動(dòng)態(tài)生成sql而已。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何進(jìn)行數據庫,比如ORACLE,SQL SERVER的逆向工程,將數據庫導入到PD中 -...
盧濤:充分利用數據庫功能實(shí)現高效數據批量審核
常用SQL匯總,Java開(kāi)發(fā)工作高頻數據庫語(yǔ)句 – 麥穗技術(shù)
數據庫文章和書(shū)籍
在oracle中通過(guò)鏈接服務(wù)器(dblink)訪(fǎng)問(wèn)sql server
SQL Server,MySql,Oracle數據庫的默認端口號
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久