sondmk header
SQL SERVER เบื้องต้น

SQL SERVER :: SELECT + WITH CUBE (การใช้ WITH CUBE เพื่อหาผลรวม ของผลรวม)

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 เป็นต้น

SQL SERVER :: SELECT BETWEEN a AND b (การใช้ BETWEEN ค้นหาข้อมูลระหว่างช่วง)

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

SQL SERVER :: SELECT Some Column INTO New Table

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

SQL SERVER :: SELECT some_column FROM (แสดงข้อมูลโดยระบุคอลัมน์)

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

SQL SERVER :: SELECT แสดงข้อมูลที่ตรงข้ามกับเงือนไขในการค้นหา

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

SQL SERVER :: SELECT แสดงข้อมูลที่ได้จากการคำนวณของคอลัมน์

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

SQL SERVER :: SELECT แสดงข้อมูลโดยการแบ่งกลุ่มเงื่อนไขในการค้นหา

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))

SQL SERVER :: SET NOCOUNT ON

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 มาให้เลย

SQL SERVER :: SQL Conditional Processing Control of Flow

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

SQL SERVER :: SQL Create Function ( Inline Table-Value Function)

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 
*/

<<<...6789101112131415>>>

Framework

Library


เครื่องมือพัฒนาเว็บ



การออกแบบและพัฒนาเว็บไซต์


Download SourceCode



copyAllright © 2016 soundmk.com