Post by Goborijung at 2019-12-09 13:06:08 | ID: 248
คำสั่ง WITH CUBE จะเป็นการหาผลรวมโดยขึ้นกับคอลัมน์ที่ประกาศไว้หลังคำสั่ง GROUP BY Ex. SELECT ProductID, SUM(Quantity) AS 'Total' FROM Product WHERE ProductID BETWEEN 900 AND 910 GROUP BY Product WITH CUBE WITH CUBE จะหาผลรวม ของผลรวมของแต่ละแถวอีกที จากตัวอย่าง จะเป็นการหาผลรวมตามกลุ่มของสินค้าด้วย GROUP BY ProductID จากนั้น สรุปผลรวมทั้งหมดที่ได้ด้วย WITH CUBE เป็นต้น
Post by Goborijung at 2019-12-06 16:29:49 | ID: 228
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE POQty BETWEEN 5 AND 10
Post by Goborijung at 2020-12-21 09:38:47 | ID: 219
SELECT column_name INTO #new_table_temp FROM table_name Ex. SELECT col1,col2 INTO #TM_Test FROM Product
Post by Goborijung at 2019-12-06 15:18:19 | ID: 223
SELECT column1, column2, column_n FROM table_name Ex. SELECT userID, UserName, FullName FROM User
Post by Goborijung at 2019-12-06 15:55:10 | ID: 225
Ex. SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE NOT POQty = 5 SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE NOT POQty BETWEEN 1 AND 10
Post by Goborijung at 2019-12-06 15:40:15 | ID: 224
SELECT col1 , col2, co3, add_new_col=(col2*cal3) FROM table_name Ex. SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE (POQty*UnitCost) > 300 SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE (POQty*UnitCost) BETWEEN 1000 AND 1500
Post by Goborijung at 2019-12-06 16:06:24 | ID: 226
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE POQty = 1 AND (UnitCost=245 OR UnitCost=740) SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE POQty = 1 AND (UnitCost IN(245,740))
Post by Goborijung at 2020-02-21 08:29:09 | ID: 403
ref: https://www.bloggang.com/mainblog.php?id=cyberpig SET NOCOUNT ON ใน Stored Procedure ช่วย performance ระบบได้ คำสั่ง SET NOCOUNT ON เป็นการ "หยุด" การคืนค่า จำนวนบรรทัดที่ได้จากการ Select ของ SQL Server มาให้ผู้เรียก ผลของการหยุด COUNT นี้ ทำให้การคืนค่า หายไป แต่ผลพลอยได้คือ ระบบเร็วขึ้น และไม่รบกวนการ nest call ของ stored procedure (จากเรื่อง "Crystal Report ... ทำไม ข้อมูลไม่ออกฟะ" แต่ถ้าเรายังต้องการจำนวนบรรทัดที่ได้จากการเรียก procedure ก็สามารถใช้ตัวเลือก @@ROWCOUNT ได้อยู่ แม้จะ SET NOCOUNT ON ไปแล้วก็ตาม ใน SQL Server 2005 ของ Microsoft เวลาเราสั่งสร้าง Procedure ใหม่ มันใส่ SET NOCOUNT ON มาให้เลย
Post by Goborijung at 2021-02-23 09:06:20 | ID: 311
/* การใช้คำสั่ง IF..ELSE */ IF EXISTS (SELECT * FROM Branch) PRINT 'is exists' ELSE PRINT 'not exists' /* การใช้คำสั่ง BEGIN..END */ IF EXISTS (SELECT * FROM Branch) BEGIN DECLARE @Count Int SELECT @Count = COUNT(*) FROM Branch WHERE Name = 'Sai 4' PRINT CONVERT(varchar(20),@Count) + ' Record(s) found' END ELSE PRINT 'not exists' /* การใช้คำสั่ง CASE โดยใช้ค่ารับเข้าค่าเดียว */ SELECT Company,Name, CASE Name WHEN 'Sai 4' THEN 's4' WHEN 'SAI4-2' THEN 's4-2' ELSE 'Unknown' END AS tCompany FROM Branch /* การใช้ CASE สำหรับเงื่อนไขตามตรรกะ */ SELECT CONo, SUM(CASE WHEN MONTH(ETADate) = 1 THEN ORDQTYPCS ELSE 0 END) AS [1-Jan], SUM(CASE WHEN MONTH(ETADate) = 2 THEN ORDQTYPCS ELSE 0 END) AS [2-Feb], SUM(CASE WHEN MONTH(ETADate) = 3 THEN ORDQTYPCS ELSE 0 END) AS [3-Mar], SUM(CASE WHEN MONTH(ETADate) = 4 THEN ORDQTYPCS ELSE 0 END) AS [4-Apr], SUM(CASE WHEN MONTH(ETADate) = 5 THEN ORDQTYPCS ELSE 0 END) AS [5-May], SUM(CASE WHEN MONTH(ETADate) = 6 THEN ORDQTYPCS ELSE 0 END) AS [6-Jun], SUM(CASE WHEN MONTH(ETADate) = 7 THEN ORDQTYPCS ELSE 0 END) AS [7-Jul], SUM(CASE WHEN MONTH(ETADate) = 8 THEN ORDQTYPCS ELSE 0 END) AS [8-Aug], SUM(CASE WHEN MONTH(ETADate) = 9 THEN ORDQTYPCS ELSE 0 END) AS [9-Sep], SUM(CASE WHEN MONTH(ETADate) = 10 THEN ORDQTYPCS ELSE 0 END) AS [10-Oct], SUM(CASE WHEN MONTH(ETADate) = 11 THEN ORDQTYPCS ELSE 0 END) AS [11-Nov], SUM(CASE WHEN MONTH(ETADate) = 12 THEN ORDQTYPCS ELSE 0 END) AS [12-Dec], FORMAT(SUM(ORDQTYPCS),'#,##0.00') AS Total FROM TM_SO WHERE YEAR(ETADate) = 2018 GROUP BY CONo ORDER BY CONo /* การใช้ WHILE วนรอบเช็คข้อมูลตามเงื่อนไข */ DECLARE @loop int SET @loop = 1 WHILE @loop <= 10 BEGIN PRINT 'Loop : ' + CONVERT(VARCHAR(10),@loop) SET @loop+=1 END /* การใช้ WHILE ร่วมกับ BREAK */ DECLARE @loop int SET @loop = 1 WHILE @loop <= 10 BEGIN PRINT 'Loop : ' + CONVERT(VARCHAR(10),@loop) IF @loop = 3 BEGIN BREAK END SET @loop+=1 END /* การใช้ WHILE ร่วมกับ CONTINUE */ DECLARE @StartDate datetime, @CheckDate datetime SET @StartDate = '2018-05-22' SET @CheckDate = @StartDate WHILE YEAR(@StartDate) = YEAR(@CheckDate) BEGIN IF DATEPART(dw,@CheckDate) = 3 -- Sun:1 , Mon:2 , Tue:3 BEGIN PRINT 'Tueseday : ' + CONVERT(VARCHAR(20),@CheckDate,103) SET @CheckDate = DATEADD(day,7,@CheckDate) CONTINUE END SET @CheckDate = DATEADD(day,1,@CheckDate) END /* คำสั่ง GOTO กระโดดไปยังตำแหน่งที่ระบุไว้ */ DECLARE @TotalMarks int SET @TotalMarks = 55 IF @TotalMarks >= 50 GOTO Pass IF @TotalMarks < 50 GOTO Fail Pass: PRINT ' Congratulations : You pass the Examination ' RETURN Fail: PRINT ' You Failed! : Better Luck Next Time ' RETURN /* คำสั่ง WAITFOR ใช้สำหรับหน่วงเวลา */ WAITFOR DELAY '00:00:10' --wait 10 sec BEGIN SELECT * FROM [User] WHERE Section IS NOT NULL AND OID = 1 END /* คำสั่ง RETURN สังให้ออกจาก Query โดยไม่สนใจคำสั่งที่เหลืออยู่ */ IF NOT EXISTS(SELECT Name FROM Section WHERE Name = 'it') --ถ้าไม่มีชื่อ it ในคอลัม Name ให้หยุดประมวลผล BEGIN RETURN END SELECT * FROM Section
Post by Goborijung at 2019-12-16 16:24:18 | ID: 329
/* Inline Table-Valued Functions เป็นฟังก์ชั่นที่ ส่งค่ากลับออกมาในรูปแบบของตาราง โดยจะผ่านทางคำสั่งคิวรี่ SELECT ซึ่งจะได้ผลลัพธ์ออกมาในรูปแบบของ แถว และ คอลัมน์ ซึ่งก็คือลักษณะของตารางนั่นเอง */ /* Ex. */ CREATE FUNCTION udf_test001 ( @year int ) RETURNS TABLE AS RETURN ( SELECT CONo, SUM(CASE WHEN MONTH(ETADate) = 1 THEN ORDQTYPCS ELSE 0 END) AS [1-Jan], SUM(CASE WHEN MONTH(ETADate) = 2 THEN ORDQTYPCS ELSE 0 END) AS [2-Feb], SUM(CASE WHEN MONTH(ETADate) = 3 THEN ORDQTYPCS ELSE 0 END) AS [3-Mar], SUM(CASE WHEN MONTH(ETADate) = 4 THEN ORDQTYPCS ELSE 0 END) AS [4-Apr], SUM(CASE WHEN MONTH(ETADate) = 5 THEN ORDQTYPCS ELSE 0 END) AS [5-May], SUM(CASE WHEN MONTH(ETADate) = 6 THEN ORDQTYPCS ELSE 0 END) AS [6-Jun], SUM(CASE WHEN MONTH(ETADate) = 7 THEN ORDQTYPCS ELSE 0 END) AS [7-Jul], SUM(CASE WHEN MONTH(ETADate) = 8 THEN ORDQTYPCS ELSE 0 END) AS [8-Aug], SUM(CASE WHEN MONTH(ETADate) = 9 THEN ORDQTYPCS ELSE 0 END) AS [9-Sep], SUM(CASE WHEN MONTH(ETADate) = 10 THEN ORDQTYPCS ELSE 0 END) AS [10-Oct], SUM(CASE WHEN MONTH(ETADate) = 11 THEN ORDQTYPCS ELSE 0 END) AS [11-Nov], SUM(CASE WHEN MONTH(ETADate) = 12 THEN ORDQTYPCS ELSE 0 END) AS [12-Dec], SUM(ORDQTYPCS) AS Total -- FORMAT(SUM(ORDQTYPCS),'#,##0.00') AS Total FROM TM_SO WHERE YEAR(ETADate) = @year GROUP BY CONo ) GO /* USE : SELECT * FROM dbo.udf_test001(2018) ORDER BY CONo หรือ SELECT TOP 1 * FROM dbo.udf_test001(2018) ORDER BY CONo */