Showing posts with label SQL. Show all posts
Showing posts with label SQL. Show all posts

Wednesday, March 10, 2021

SQL, Select, Replace

 UPDATE  YourTable
   SET  YourColumn = Replace(YourColumn ,'oldText','newText')
  WHERE YourCriteria

Monday, October 12, 2020

SQL หาผลรวม แต่ละเดือน

SELECT DATEPART(Year ,DateCol) As 'Year' 

                  ,DATEPART(Month ,DateCol) As 'MTH'

                 ,Round(SUM(YourDataColumn),2) As 'kWh'

FROM YourTable

WHERE ...YourCriteria
GROUP BY DATEPART(Year ,DateCol) , DATEPART(Month ,DateCol)

Friday, March 13, 2020

SQL Server, ข้อแตกต่างระหว่าง COALESCE() กับ ISNULL(), เปรียบเทียบ COALESCE() กับ CASE()

COALESCE คือคำสั่งที่ใช้ในการแปลงค่าจาก NULL เป็น ค่าที่ต้องการ

Syntax : COALESCE(expression1,expression2,…n,VALUE)
** VALUE คือค่าที่ต้องการเปลี่ยนเมื่อ expression เป็น NULL เช่น ต้องการให้แปลง NULL เป็น 10 ก็ใส่ VALUE เป็น 10 **

ตัวอย่างที่ 1
COALESCE(NULL,NULL,’show value’) => ผล : show value
COALESCE(1,2,’show value’) => ผล : 1
COALESCE(1,NULL,’show value’) => ผล : 1
COALESCE(NULL,2,’show value’) => ผล : 2

Syntax : ISNULL ( check_expression , replacement_value )

ตัวอย่างที่ 2
where isnull(name,”) <> ”
มีค่าเท่ากับ  where name is not null and name <> ”
มีค่าเท่ากับ  where name <> ”

ตัวอย่างที่ 3
SELECT ISNULL(Weight, 0) FROM tb_DimProduct

ข้อแตกต่างระหว่าง COALESCE() กับ NULL()
1. เมื่อเจอค่า NULL : ISNULL จะแปลงค่าเป็น int แต่ COALESCE เราจะต้องกำหนด data type
2. ISNULL สามารถใช้ได้กับแค่ 2 parameters เท่านั้น ในขณะที่ COALESCE สามารถระบุ parameters ได้มากกว่า 2

เปรียบเทียบ COALESCE() กับ CASE()
— CASE expression:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
ELSE expressionN
— COALESCE expression:
SELECT COALESCE(expression1,expression2,expressionN)

Monday, December 2, 2019

Returning TOP N Records

Returning only the first N records in a SQL query differs quite a bit between database platforms. Here's some samples

Wednesday, February 7, 2018

SQL Command, Select, Date

DECLARE @D1 DateTime
DECLARE @D2 DateTime
SET @D1 = '2018-01-01'
SET @D2 = '2018-01-04'

แบบที่ 1 ที่เคยใช้
SELECT dateColumn, Column2 FROM YourTable WHERE dateColumn>= @D1 AND dateColumn <= @D2


แบบที่ 2 ใช้ BETWEEN
SELECT dateColumn, Column2 FROM YourTable WHERE dateColumn BETWEEN  @D1 AND @D2


แบบที่ 3 กรณีต้องการเลือกตั้งแต่วันที่ 1 ของเดือนนั้น จนถึงวันที่เลือก และต้องการลดจำนวนพารามิเตอร์ลงจาก 2 ตัวเหลือ 1 ตัว
SELECT dateColumn, Column2 FROM YourTable WHERE dateColumn BETWEEN  DATEADD(D,-(Day(@D2)-1),@D2) AND @D2

Tuesday, October 10, 2017

กรณีสร้างคอลัมน์ขึ้นมาเพื่อใช้ในการ JOIN

DECLARE @D1 DateTime
DECLARE @D2 DateTime
SET @D1 = '2017-10-01'
SET @D2 = '2017-10-02'
SELECT *
        FROM (SELECT *,1 As j FROM YourTable WHERE YourColumn = @D1) As A  
              LEFT OUTER JOIN
             (SELECT *,1 As j FROM YourTable WHERE YourColumn = @D2) As B 
              ON A.j = B.j

กรณี 3 ตาราง
DECLARE @D1 DateTime
DECLARE @D2 DateTime
SET @D1 = '2017-10-01'
SET @D2 = '2017-10-02'
SELECT *
        FROM (SELECT *,1 As j FROM YourTable1 WHERE YourColumn = @D1) As A  
              LEFT OUTER JOIN
             (SELECT *,1 As j FROM YourTable2 WHERE YourColumn = @D2) As B 
              ON A.j = B.j
              LEFT OUTER JOIN
             (SELECT *,1 As j FROM YourTable3 WHERE YourColumn = @D2) As C
              ON A.j = C.j

Friday, April 1, 2016

DATEPART

ต้องการหาว่า
มีวันไหนบ้างที่จำนวน Record ไม่เท่ากับ 1440

SELECT count(TagDateTime) AS recCnt,DATEPART(year,[TagDateTime]) AS iYear ,DATEPART(month,[TagDateTime]) AS iMth ,DATEPART(day,[TagDateTime]) As iDay
  FROM TableName
group by DATEPART(year,[TagDateTime]),DATEPART(month,[TagDateTime]),DATEPART(day,[TagDateTime])
having count([TagDateTime]) <> 1440
order by DATEPART(year,[TagDateTime]),DATEPART(month,[TagDateTime]),DATEPART(day,[TagDateTime])

Monday, February 9, 2015

MS SQL Server - การใช้งาน Server Objects - Linked Servers

ที่มา: http://www.na-vigator.com/software-development/software-developement/387--run-query-server

แนะนำวิธีการใช้งานข้อมูลระหว่าง Database ของ Microsoft SQL Server หลายเครื่อง
ให้สามารถทำงานร่วมกันได้ ซึ่งจะช่วยให้คุณ Select, Insert, Delete, Update ข้อมูลระหว่าง Server
ได้ไม่ยาก ซึ่งสามารถนำไปใช้ในการโอนข้อมูล , ดึงข้อมูลจากฐานข้อมูลของโปรแกรมหนึ่งมาใช้งานกับ
ฐานข้อมูลของอีกโปรแกรมหนึ่งได้ไม่ยาก

สรุปขั้นตอนดังนี้
  1.  Login MS SQL Server ด้วย User กลุ่ม System Admin
  2. ไปที่ Server Objects => คลิกขวาที่ Linked Servers เลือก New Linked Server...
  3. Server type: เลือก SQL Server 
  4. Linked server: ใส่ชื่อเครื่อง Server หรือในที่นี้จะใส่ IP Address ของเครื่อง Server
  5. คลิกที่ page: Security
  6. กดปุ่ม Add
  7. ป้อน Local Login, Remote User และ Remote Password
  8. กดปุ่ม OK
การเรียกใช้งาน
ในกรณีการดึงข้อมูลข้าม Server ก็ใช้วิธีไม่ต่างกัน เพียงแต่เพิ่มชื่อ Server ไว้ข้างหน้าชื่อ Database เช่น
Server1.Database1.dbo.Table1
หรือ
[Server1\SQL2008].Database1.dbo.Table1
หรือ
[128.xxx.xxx.xxx].Database1.dbo.Table1




MS SQL Server คำสั่งคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง

1.กรณีคัดลอกไปทุกคอลัมน์
INSERT INTO table2
SELECT * FROM table1
2.กรณีคัดลอกไปบางคอลัมน์แบบมีเงื่อนไข
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers
WHERE Country='Germany'

MS SQL SERVER คำสั่งลบแถวซ้ำ

    select distinct * into #tmp From EmpDup
    delete from EmpDup
    insert into EmpDup                
    select * from #tmp drop table #tmp

Sunday, June 29, 2014

SQL Command เลือกเฉพาะวันสุดท้ายของแต่ละเดือน

SELECT
  *
FROM
  YourTable
WHERE
  DateField IN (
    SELECT   MAX(DateField)
    FROM     YourTable
    GROUP BY MONTH(DateField), YEAR(DateField)
  )

Thursday, September 26, 2013

ต้องการใช้ Select Command เลือก Record Number และ Record Count มาด้วย

Use the following code in SQL Server

ตัวอย่าง Select Record Number มาด้วย

   select rank() OVER (ORDER BY a.au_lname, a.au_fname) as rank, a.au_lname, a.au_fname
   from authors a
   order by rank 


ตัวอย่าง Select Record Count มาด้วย

SELECT my_table.my_col, count(*) OVER() AS 'Count'
  FROM my_table
 WHERE my_table.foo = 'bar'


Thursday, October 4, 2012

SQL Server : คำสั่ง Select หลาย Table

เมื่อก่อนหลายคนอาจเคยใช้แบบโบราณแบบนี้ซึ่งไม่ถูกต้องตามมาตรฐาน ANSI SQL เช่น
SELECT *
    FROM TableOne t1, TableTwo t2
    WHERE t1.SomeKey = t2.Id
        AND t1.SomeValue = 'search'

แล้วเขียนอย่างไรจึงจะถูกต้องตามมาตฐานหละ ก็เขียน
ประมาณนี้นะ

select t1.col1, t2.col1, t3.col1, t4.col1 ... etc
from table1 t1
inner join table2 t2
on t1.col2 = t2.col2
inner join table3 t3
on t1.col3 = t3.col3
inner join table4 t4
on t1.col4 = t4.col4
where ...
etc.

หรือ
SELECT *
    FROM TableOne t1
    INNER JOIN TableTwo t2
        ON t1.SomeKey = t2.Id
    WHERE t1.SomeValue = 'search'

ลองมาดูตัวอย่าง Inner และ Outer Joins กัน

1.Inner Join

select * from dbo.Students S 

INNER JOIN dbo.Advisors A 

ON S.Advisor_ID=A.Advisor_ID

ผลลัพท์




2.Left Outer Join

select * from dbo.Students S 
   LEFT OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID




3.Right Outer Join

select * from dbo.Students S 
   RIGHT OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID

ผลลัพท์ที่ได้ก็ลองคิดดูนะ


4.Full Outer Join

select * from dbo.Students S 
   FULL OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID






 5.เลือก Row ที่ไม่ Join

select * from dbo.Students S 
   FULL OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID
   where A.Advisor_ID is null or S.Student_ID is null



VB.Net ต้องการให้ Datagridview, Gridview แสดงเลขที่บรรทัด

VB.Net ต้องการให้ Datagridview, Gridview แสดงเลขที่บรรทัด

ก็ต้องเริ่มจากตอนที่ Select มาก็ให้เอาเลขที่บรรทัดมาด้วยตัวอย่างเช่น

SELECT *, ROW_NUMBER() OVER( ORDER BY ColumnName1 ) AS RowNumber
FROM Table1

ก็ประมาณนี้แหละ

Monday, August 6, 2012

SQL Command - Select เฉพาะเวลาที่ต้องการ

ถาม ถ้าใน TABLE1 มีคอลัมน์ชื่อ DateColumn1 ชนิด DateTime
ใน TABLE1 นั้นมี Records ทุก ๆ ชั่วโมงทุก ๆ วัน
ถ้าเราต้องการเฉพาะเวลา 9.00 น.ของแต่ละวัน จะใช้คำสั่ง Select แบบไหน

ตอบ
สามารถใช้ฟังก์ชั่น DATEPART มีตัวอย่างดังนี้

SELECT * FROM TABLE1
WHERE DATEPART(hh, DateColumn1) = 9

Sunday, July 15, 2012

SQL command - Returning TOP N Records

Microsoft SQL Server
SELECT TOP 100 column FROM table

MySQL
SELECT column FROM table
LIMIT 100

Oracle
SELECT column FROM table
WHERE ROWNUM <= 100

Sunday, June 24, 2012

ASP.Net : SQL Data Connection แบบที่ 3

คล้ายแบบที่ 2 แต่ใช้ DataView
    Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dv As DataView
            DA.Fill(ds, "Table1")
            dt = ds.Tables("Table1")
            dv = dt.DefaultView
            dv.Sort = "Column1 DESC, Column2"
            dv.RowFilter = "Column2 > 800000"
            GridView1.DataSource = dv
            GridView1.DataBind()

ASP.Net : SQL Data Connection แบบที่ 2

คล้ายแบบที่ 1 แต่ใช้ Data Table

        Dim ds As New DataSet
        Dim dt As New DataTable
            DA.Fill(ds, "Table1")
            dt = ds.Tables("Table1")
            GridView1.DataSource = dt

Wednesday, November 30, 2011