2015-11-19 77 views
1

我該如何使用select查詢從一行創建兩行?如何從一行創建兩行SQL

下面是一個例子

create table timecards 
    (employeeid nvarchar(10) not null, 
    regulartime int null, 
    overtime int null) 

    insert into timecards 
    values ('A', 8, 1) 

我想結果是

A,8 
A,1 
+4

[不良習慣踢:聲明VARCHAR沒有(長度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without -length.aspx) - 您應該**總是**爲您使用的任何'varchar'變量和參數提供一個長度 –

+0

建議的良好習慣(自20世紀80年代早期Oracle 2以來使用sql):在create table中始終顯式聲明爲null列爲空。數據庫通常具有系統範圍或會話級別設置,這會更改默認的可空性。如果默認值與您的想法不符,它可能會破壞您的模式。像我這樣的恐龍在閱讀你的代碼時會知道你的意圖。當然,在這種情況下無關緊要。 – joshp

+0

感謝您的提示 – BrianMichaels

回答

1

的方式很多....怎麼樣

select employeeid, regulartime as somekindatime 
from timecards 
union all 
select employeeid, overtime 
from timecards 

ALL關鍵字只是通知我們不想進行排序,並消除重複SQL。除非你真的想要消除重複的行,否則可以節省時間。

1

可以unpivot表。在這種情況下,任何列中的值都將被刪除。

SQL Fiddle

select employeeid, tm 
from 
(select employeeid,regulartime,overtime from timecard) t 
UNPIVOT 
(tm for id in (regulartime,overtime) 
) as x