2010年9月17日 星期五

declare @xx table

我真是淺了,現在才知道SQL有這記憶體虛擬表可運用
截至現在,都還是拉到程式內再放到datatable or dataset內後;來處理其它運用
===
declare @xx table (fieldname1 varchar(1),xxx)
底下為收集了相關:(因我自己也要參用)
===
DECLARE @TmpTable TABLE (
FirstName varchar(20),
LastName varchar(20)
)
建立一個 table 資料型別的暫存資料表,它是存在記憶體中的。因此其他人無法看到,此外當定義 table 資料型別的函數、預存程序或批次結束時,就會自動清除這個暫存資料表。
===
在SQL中声明一个表变量,使用Declare @table Table,即可对这个变量进行表的操作.

如下所示,声明@user变量,然后插入数据.

Declare @user Table
(
ID INT,
NAME NVARCHAR(15)
)

Insert INTO @table(ID,NAME)
Select ID,NAME
FROM USER
===
(单号 char(5),款号 CHAR(3), 系列号 CHAR(5), 数量 INT, 生产日期 CHAR(10))
INSERT @a SELECT 'A1211','F11','2042N',10,'20100901'
UNION ALL SELECT 'A1212','F12','2042N',20,'20100901'
UNION ALL SELECT 'A1211','F11','3044N',10,'20100901'
UNION ALL SELECT 'A1213','F13','2042N',10,'20100901'
UNION ALL SELECT 'A1211','F11','2042N',20,'20100902'
UNION ALL SELECT 'A1214','F11','2011A',10,'20100901'
UNION ALL SELECT 'A1212','F11','2045N',10,'20100903'
UNION ALL SELECT 'A1213','F12','2045N',20,'20100903'

DECLARE @b TABLE (单号 char(5),款号 CHAR(3), 系列号 CHAR(5), 数量 INT, 出货日期 CHAR(10))
INSERT @b SELECT 'A1211','F11','2042N',10,'20100910'
UNION ALL SELECT 'A1212','F12','2042N',20,'20100912'
UNION ALL SELECT 'A1211','F11','3044N',10,'20100912'
UNION ALL SELECT 'A1213','F13','2042N',10,'20100912'
UNION ALL SELECT 'A1214','F11','2011A',10,'20100912'
UNION ALL SELECT 'A1211','F22','2042N',10,'20100913'

--从A表中取出相同生产日,相同系列号,不同单号的数据
SELECT *
FROM @a a
WHERE a.生产日期 IN (SELECT 生产日期 FROM @a GROUP BY 生产日期 HAVING COUNT(生产日期)>1 )
AND a.系列号 IN (SELECT 系列号 FROM @a GROUP BY 系列号 HAVING COUNT(系列号)>1)
--单号 款号 系列号 数量 生产日期
------- ---- ----- ----------- ----------
--A1211 F11 2042N 10 20100901
--A1212 F12 2042N 20 20100901
--A1213 F13 2042N 10 20100901
--A1212 F11 2045N 10 20100903
--A1213 F12 2045N 20 20100903
--
--(5 行受影响)
SELECT a.*,ISNULL(b.出货日期,'没有出货') AS 出货日期
FROM @a a
LEFT JOIN (SELECT 单号,系列号,MIN(出货日期) AS 出货日期 FROM @b GROUP BY 单号,系列号) b ON a.单号 = b.单号 AND a.系列号 = b.系列号
WHERE a.生产日期 IN (SELECT 生产日期 FROM @a GROUP BY 生产日期 HAVING COUNT(生产日期)>1 )
AND a.系列号 IN (SELECT 系列号 FROM @a GROUP BY 系列号 HAVING COUNT(系列号)>1)
--查询结果
--单号 款号 系列号 数量 生产日期 出货日期
------- ---- ----- ----------- ---------- ----------
--A1211 F11 2042N 10 20100901 20100910
--A1212 F12 2042N 20 20100901 20100912
--A1213 F13 2042N 10 20100901 20100912
--A1212 F11 2045N 10 20100903 没有出货
--A1213 F12 2045N 20 20100903 没有出货
--
--(5 行受影响)

沒有留言:

張貼留言