連接,CASE的使用

basecode

person

Intid

Strname

Inteducationid

Intnationid

1

張三

Null

10

2

李四

5

11

3

王五

7

14

4

餘六

9

10

 

由上面兩張表得到如下的表:

 

編號

姓名

學歷

民族

1

張三

未知

漢族

2

李四

高中

藏族

3

王五

大專

回族

4

餘六

博士/研究生

漢族

解析:所用到的知識點:

1.連接表。有兩種方法:一是用子查詢的方法,一是用join連接。而join連接又有兩種方法:一是內連接,一是外連接(一般用左外連接比較好)

2.ISNULL函數

    ISNULL函數的作用是檢查元素是否爲空,若爲空就用指定的字符串代替。

3.CASE語句

     

CASE 函數的組成部分:

  • CASE 關鍵字。
  • 需要轉換的列名稱。
  • 指定搜索內容表達式的 WHEN 子句和指定要替換它們的表達式的 THEN 子句。
  • END 關鍵字。
  • 可選的、定義 CASE 函數別名的 AS 子句。

CASE有兩種形式:一種是根據是否相等來處理,一種是更具布爾值Boolean來處理,如實例:

 

下面的示例使用 CASE 函數更改產品系列類別的顯示

USE AdventureWorks;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

CASE 函數的另一個用途是對數據進行分類

USE AdventureWorks;
GO
SELECT   ProductNumber, Name, 'Price Range' = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO

綜上所述:上題的答如下:

 

 SELECT s.Intid AS 編號,s.Strname AS 姓名,ISNULL(b.Strcaption ,'未知')AS 學歷,ISNULL(d.Strcaption,'未知') AS 民族
FROM person AS s
LEFT OUTER JOIN basecode AS b on b.Intid=s.inteducationid
LEFT OUTER JOIN basecode AS d on d.Intid=s.intnationid
Go
SELECT s.Intid AS 編號,s.Strname AS 姓名,
'學歷'=CASE
WHEN b.Strcaption is null THEN '未知'
ELSE b.Strcaption
end,
'民族'=CASE
WHEN d.Strcaption is null THEN '未知'
ELSE d.Strcaption
end
FROM person AS s
LEFT OUTER JOIN basecode AS b on b.Intid=s.inteducationid
LEFT OUTER JOIN basecode AS d on d.Intid=s.intnationid
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章