SELECT
[DISTINCT] [* | [ expression [[AS] column_name_alias] [, ...] ]
[INTO #temp_table_name]
[FROM table_name]
[WHERE condition [, ...] ]
[GROUP BY expression [, ...] ]
[HAVING condition [, ...] ]
[ORDER BY expression [ASC | DESC] [, ...] ]
[LIMIT row_count]
[WITH (option_name=option_value] [, ...]) ] [;]
option_name:=IDENTIFIER
option_value:= NUMBER | STRING
SELECT [DISTINCT] [* | [ expression [[AS] column_name_alias] [, ...] ]
FROM #temp_table_name
[[INNER | OUTER | CROSS] JOIN #temp_table_name [alias] ON condition
[join_statement]
[join_statement]
...
]
[WHERE condition [, ...] ]
[GROUP BY expression [, ...] ]
[HAVING condition [, ...] ]
[ORDER BY expression [ASC | DESC] [, ...] ]
[LIMIT row_count]
select_into_temp;
[select_into_temp;]
[select_into_temp;]
...
select_from_temp_table;
--some comment in single line
|
/* some block comment */
select_from_temp_table_1
UNION | UNION ALL
select_from_temp_table_2
[UNION | UNION ALL]
select_from_temp_table_3
...
...
CREATE PROCEDURE proc_name
[@parameter_name [= 'Some Default Value'] ]
[@parameter_name [= 'Some Default Value'] ]
...
...
AS
sql-statement;
[sql-statement | sql-temp-table-usage] ;
[sql-statement | sql-temp-table-usage] ;
...
...
Executing PROCEDURE
EXEC proc_name [value1] [,value2] ... [,valueN]
Deleting PROCEDURE
DROP PROCEDURE proc_name
SELECT * FROM $
WITH(
SRC='https://zappysys.com/downloads/files/test/invoices.csv'
,ColumnDelimiter=','
,HasColumnHeaderRow='True'
--,DateFormatString='yyyy-MM-dd HH:mm:ss'
--,FileCompressionType='GZip' --or-- Zip --or-- None
--,SkipRows='5'
--,SkipHeaderCommentRows='5'
)
SELECT * FROM $ WITH (SRC='C:\Data\cust-1.csv')
SELECT * FROM $
WITH (
SRC='C:\Data\cust*-?.csv'
--,RECURSIVE='True' --Include files from sub folder
)
SELECT * FROM $
WITH
(DATA='Name|Age|Income|Hiredate
Bob|55|5000.00|2018-01-01
Sam|51|2000.00|2016-02-01
John|45|3000.00|2014-07-01
'
,ColumnDelimiter='|'
)
SELECT * FROM $
WITH(
Data='cmd:>powershell -executionpolicy bypass -Command "[System.IO.StreamReader]::new((Invoke-WebRequest -URI https://zappysys.com/downloads/files/test/invoices.csv).RawContentStream).ReadToEnd()"'
,ColumnDelimiter=','
,HasColumnHeaderRow='True'
--,DateFormatString='yyyy-MM-dd HH:mm:ss'
--,SkipRows='5'
--,SkipHeaderCommentRows='5'
)
SELECT * FROM $
WITH
(DATA=@'Name|Age|Income|Hiredate\r\nBob\u0041|55|5000.00|2018-01-01\r\nSam|51|2000.00|2016-02-01\r\nJohn|45|3000.00|2014-07-01\r\n'
,ColumnDelimiter='|'
)
--Credentials via Query
SELECT * FROM $ WITH (SRC='https://zappysys.com/downloads/files/test/invoices.csv'
,DataConnectionType='HTTP'
,CredentialType='Basic'
,UserName='user1'
,Password='pass123')
--Credentials inside connection string [Use Data source setup grid >> Select Connection = HTTP (Click Configure) >> Set Credential type=Basic, UserId=user1, Password=pass123]
--SELECT * FROM $ WITH (SRC='https://zappysys.com/downloads/files/test/invoices.csv')
--Credentials via Query
SELECT * FROM $
WITH (SRC='http://yourhost/some-service',DataConnectionType='HTTP',CredentialType='Ntlm')
--Credentials inside connection string [Use Data source setup grid >> Authentication type=Ntlm]
--SELECT * FROM $ WITH (SRC='http://yourhost/some-service')
--Credentials via Query
SELECT * FROM $ WITH (
SRC='http://yourhost/api/some-service'
,DataConnectionType='OAuth'
,UseCustomApp='True'
,OAuthVersion='OAuth2'
,AuthUrl='https://yourhost/api/authorize'
,TokenUrl='https://yourhost/api/token'
,ClientId='xxxxxxxxxxx'
,ClientSecret='xxxxxxxxxxxxx'
,AccessToken='xxxxxxxxxxx'
,RefreshToken='xxxxxxxxxxx' --//This is only obtained from UI by clicking Generate Token Button
)
--Credentials inside connection string [Use Data source setup grid >> Authentication type=OAuth >> Click OAuth Button to configure connection]
SELECT * FROM $ WITH (SRC='http://yourhost/api/some-service')
--Credentials via Query
--Check this link to learn more about how to generate ClientId / ClientSecret >> https://zappysys.com/blog/register-google-oauth-application-get-clientid-clientsecret/
--To get Access Token and Refresh Token >> Goto properties grid >> Change Authentication type=OAuth >> Click OAuth Button to configure connection >> Select Provider='Google' >> Use Custom App >> Select Scope and click Generate Token >> Save tokens to file
SELECT * FROM $ WITH
(
SRC='https://www.googleapis.com/analytics/v3/metadata/ga/columns'
,UseCustomApp='True'
,DataConnectionType='OAuth'
,ServiceProvider='Google'
,ClientId='3855xxxxxx-xxxxxxxxxxxxxxxxx.apps.googleusercontent.com'
,ClientSecret='qF7axxxxxxxxxxxWfs'
,AccessToken='ya29.GlsxxxxxxxxxIam'
,RefreshToken='1/pFOxxxxxxxxxxgU' --//This is only obtained from UI by clicking Generate Token Button
)
--Credentials inside connection string [Use Data source setup grid >> Authentication type=OAuth >> Click OAuth Button to configure connection]
SELECT * FROM $ WITH (SRC='https://www.googleapis.com/analytics/v3/metadata/ga/columns')
SELECT * FROM $
WITH(
Src='https://zappysys.com/downloads/files/test/rest-getdata.aspx?format=csv'
--,RequestMethod='POST'
--,RequestData='sessionid=[$token$]"'
,Header='Content-Type: text/plain || Accept: */* || Cache-Control: no-cache'
,DataConnectionType='HTTP'
,CredentialType='TokenDynamic'
,UserName='MyUser001'
,Password='P@$$w0rdAAc12'
,AuthScheme='{none}'
,TokenUrl='https://zappysys.com/downloads/files/test/rest-login.aspx'
,TokenRequestData='{ user:"[$userid$]", password:"[$password$]" }'
,TokenRequestMethod='POST'
,TokenResponseContentFilter='$.sessionid'
,TokenRequestHeaders='Content-Type:application/json | Accept:*/* | Cache-Control:no-cache'
,TokenResponseContentType='Json'
)
SELECT * FROM $
WITH (
SRC='https://zappysys.com/downloads/files/test/page-csv.aspx?page=1&mode=DetectBasedOnResponseStatusCode'
,PagingMode='ByUrlParameter'
,PagingByUrlAttributeName='page'
,PagingByUrlEndStrategy='DetectBasedOnResponseStatusCode'
,PagingByUrlCheckResponseStatusCode=401
,IncrementBy=1
)
SELECT * FROM $
WITH (
SRC='https://zappysys.com/downloads/files/test/cust-<%page%>.csv'
,PagingMode='ByUrlPath'
,PagingByUrlAttributeName='<%page%>'
,PagingByUrlEndStrategy='DetectBasedOnRecordCount'
,IncrementBy=1
)
SELECT
c.custid,c.name,c.city
,o.orderid,o.orderdate,o.total
/* ,i.itemid,i.qty,i.shipped */
FROM $
WITH(
--1st level (root)--
src='https://zappysys.com/downloads/files/test/join/customers.csv'
,alias='c'
,WaitTimeMs='500'
--2nd level--
--You can pass parent column to child URL using placeholder [$parent_alias.parent_col_name$] syntax (e.g. [$c.custid$] )
,join1_src='https://zappysys.com/downloads/files/test/join/c[$c.custid$]/orders.csv'
,join1_alias='o'
,join1_WaitTimeMs='500'
/*
--3rd level--
--You can pass parent column to child URL using placeholder [$parent_alias.parent_col_name$] syntax (e.g. [$c.custid$] and [$o.orderid$])
,join2_src='https://zappysys.com/downloads/files/test/join/c[$c.custid$]/o[$o.orderid$]/items.csv'
,join2_alias='i'
,join2_WaitTimeMs='500'
--maximum 7 levels deep you can go. Any attributes allowed in WITH clause can be prefixed by by joinN_xxx
-- join3_xxxxx, join4_xxxxxx .......... join7_xxxxx
*/
)
SELECT
_pid,q._rid
, r.custid as CUST_ID, r.city as CUST_CITY
, q.VAL1, q.VAL2, q.VAL3, q.DESCR
FROM $
ORDER BY _pid,q._rid
WITH (
SRC='https://zappysys.com/downloads/files/test/join/customers.csv'
,ALIAS='r'
,JOIN1_DATA='VAL1,VAL2,VAL3,DESCR
ABC123,000100,000100,Some notes1
000100,000200,000200,Some notes2
000200,000300,000300,Some notes3',JOIN1_ALIAS='q'
--metadata for final output (include column, type, length for output of SELECT).
--This meta does not perform type casting
,Meta='[
{Name: "_rid",Type: "Int32"},
{Name: "_pid",Type: "Int32"},
{Name: "CUST_ID",Type: "String",Length: 100},
{Name: "CUST_CITY",Type: "String",Length: 100},
{Name: "VAL1",Type: "String",Length: 100},
{Name: "VAL2",Type: "Int32"},
{Name: "VAL3",Type: "String"},
{Name: "DESCR",Type: "String",Length: 254}
]'
--child level1 metadata (length not needed). Datatype used below may perform some type casting ---
,JOIN1_meta='[
{Name: "VAL1",Type: "String"},
{Name: "VAL2",Type: "Int32"},
{Name: "VAL3",Type: "String"},
{Name: "DESCR",Type: "String"}
]'
)
select a.url,b.data,file_write_binary(base64_to_bytes(b.data) ,'c:\temp\' || name ) as bytes_written
from $
WITH (
SRC='https://zappysys.com/downloads/files/test/imagelist.csv',
ALIAS='a',
JOIN1_SRC='[$a.url$]',
JOIN1_ALIAS='b',
JOIN1_SaveContentAsBinary='true'
)
SELECT c.title,o.url,o.data
FROM $
WITH(
Src='http://google.com'
,EnableRawOutputModeSingleRow='True'
,RawOutputFilterExpr='<title>([^<]*)<\/title>{{0,1}}||content="([^"]*)"{{0,1}}' --can be Regex, JsonPath or XPath. Use double pipe to split multiple columns
,RawOutputDataRowTemplate=@'{title:"[$1]", content:"[$2]" }' --must be Json template. Comment this line to generate default columns e.g. col1, col2...If you comment this then use c.col1 and c.col2 instread of c.title and c.content in Select and join1_xxxxx attributes
,RawOutputExtractMode='Regex' --can be Regex, Xml, Json or None. -- Comment this and RawOutputFilterExpr, RawOutputDataRowTemplate to extract Raw data without column parsing (i.e. returns raw text of URL/Path)
,Alias='c'
,join1_RequestMethod='POST'
,join1_RequestData='url,data
http://abc.com,Row1-[$c.content$]
http://xyz.com,Row2-[$c.content$]'
,join1_src='https://zappysys.com/downloads/files/test/rest-getdata.aspx?id=[$c.title$]&postsame=1'
,join1_RequestContentTypeCode = 'TextPlain'
,join1_alias='o'
,join1_EnableRawOutputModeSingleRow='False'
)
SELECT * FROM $ WITH
(
SRC='https://zappysys.com/downloads/files/test/cust-1.csv',
EnableStatusCheck='True',
StatucCheckMaxWaitSeconds=7,
StatucCheckIterationWaitSeconds=3,
--StatusCheckForFailedValue = 'True',
--StatusFailedValue = 'Failed|Cancelled',
--StatusFieldFilterExpr='-START-(.*)-END-', --Use XPath, JSonPath or Regex to narrow down to single property / content under which you like to search
--StatusFieldFilterType='Regex', --or use Csv, Xml, Regex, None
StatusSuccessValue='C1' --Wait until C1 or C2 or C3 found in response (Use Regular expression syntax)
)
/*
--- See real world example of status check pattern here (Use of XML Driver)... https://zappysys.com/blog/import-bing-ads-data-sql-server-performance-reports/
SELECT c.* FROM $
WITH(
--///////////////////////////////////
--Step-1: submit report request for XML format
--///////////////////////////////////
alias='a'
,Src='https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/v13/ReportingService.svc'
,Filter='$.s:Envelope.s:Body.SubmitGenerateReportResponse'
,RequestData='@C:\Requests\BingAds\sql_body1.xml' --Get Body from File for clean Look (Read blog post above to see actual body)
,IsMultiPart='True'
,RequestContentTypeCode='TextXml'
,Header='SOAPAction: "SubmitGenerateReport"'
,RequestMethod = 'POST'
,EnableBodyPlaceholderForMultiPart = 'True'
,Meta = '[{ "Name": "ReportRequestId","Type": "Int64"}]'
--///////////////////////////////////
--///Step-2: keep checking status until report is ready - returns final url when done
--///////////////////////////////////
,join1_alias = 'b'
,join1_Filter = '$.s:Envelope.s:Body.PollGenerateReportResponse.ReportRequestStatus'
,join1_RequestData = '@C:\Requests\BingAds\sql_body2.xml'
,join1_IsMultiPart = 'True'
,join1_Src = 'https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/v13/ReportingService.svc'
,join1_RequestContentTypeCode = 'TextXml'
,join1_Header = 'SOAPAction: "PollGenerateReport"'
,join1_RequestMethod = 'POST'
,join1_EnableBodyPlaceholderForMultiPart = 'True'
,join1_EnableStatusCheck = 'True',
,join1_StatucCheckMaxWaitSeconds = 300, --wait max 5 mins ?
,join1_StatucCheckIterationWaitSeconds = 5, --check every 5 sec ?
,join1_StatusSuccessValue = 'Success', --look for success word in response
--, join1_Meta = '[{ "Name": "ReportDownloadUrl","Type": "String",Length: "500"},{ "Name": "Status","Type": "String",Length: "20"}]'
--///////////////////////////////////
--Step-3: Download report(Zip file) and Parse rows
--///////////////////////////////////
,join2_alias = 'c'
,join2_DataConnectionType = 'Default'
,join2_Src = '[$b.ReportDownloadUrl$]'
,join2_Filter = '$.Report.Table.Row[*]'
,join2_ElementsToTreatAsArray = 'Row'
,join2_RequestMethod = 'GET'
,join2_IsMultiPart = 'False'
,join2_FileCompressionType = 'Zip'
)
*/
SELECT * FROM $
WITH(
Src='https://zappysys.com/downloads/files/test/cust-1.csv?really-large-file=1'
,TempStorageMode='Disk' --or 'Memory'
--OR
--,TempStorageMode=1 --//Memory=0, Disk=1
)
SELECT * FROM $
WITH
(DATA='id,checknumber,name
1,0001,AAA
2,0002,BBB
3,0003,CCC
'
--//Method-1: >>>DIRECT META (compact mode)<<<
,META='id:int;checknumber:string(10);name:string(10)'
-- Add: @OverrideMode:1 in the column list to override meta for only specific column(s) - In below example we are changing default datatype/length for id and checknumber, all other columns are dynamic so dont have to supply in META clause
--,META='@OverrideMode:1;id:int;checknumber:string(10)'
--//Method-2: >>>DIRECT META (csv mode)<<<
--,META='[{Name:"id",Type:"Int32"},{Name:"checknumber",Type:"String",Length:10},{Name:"name",Type:"String",Length:10}]'
-- Add: @OverrideMode entry in the column list to override meta for only specific column(s). No need to set Type for that entry - In below example we are changing default datatype/length for id and checknumber, all other columns are dynamic so dont have to supply in META clause
--,META='[{Name:"@OverrideMode"}, {Name:"id",Type:"Int32"},{Name:"checknumber",Type:"String",Length:10}]'
--//Method-3: >>>META from File <<<
--,META='c:\data\meta.csv'
--//Method-4: >>>META from Internal Storage - Just refer entry by name <<<
--,META='MY_META_STORAGE_NAME'
)
SELECT * FROM $
limit 3 WITH
(METHOD='POST', HEADER='Content-Type: text/plain || x-hdr1: AAA'
,SRC='http://httpbin.org/post'
,BODY='
{
id:1,
notes:"Line1\r\nLine2"
}'
)
SELECT * FROM $
WITH (METHOD='POST' ,HEADER='Content-Type: application/xml || x-hdr1: SomeValue'
,SRC='https://zappysys.com/downloads/files/test/rest-getdata.aspx?postsame=1'
,BODY='col1,col2
1,AAA
2,BBB
'
--define output metadata using static value like below or from file
,META='[{Name: "col1",Type: "Int32"},{Name: "col2",Type: "String",Length: 10}]'
--,META='id=Int32;name=String(10)' --compact meta format
--,META='c:\query_meta.csv'
)
SELECT * FROM $
limit 3 WITH
(METHOD='POST', HEADER='Content-Type: text/plain || x-hdr1: AAA'
,SRC='http://httpbin.org/post'
,BODY='@c:\files\dump.csv'
,IsMultiPart='True'
)
exec webRequest 'http://httpbin.org/post', 'POST', '*BODY*', 'x-hdr1: AA||x-hdr2: BB'
--You can also arrange parameters in any order using named parameters and optional parameters
--exec webRequest @verb='POST', @uri='https://httpbin.org/post', @body='*BODY*', @headers='Insecure-Requests: 0||User-Data: httpbin.org'
--exec webRequest @verb='GET', @uri='https://httpbin.org/get'
SELECT
substr('ZappySys', 1, 5)
, printf('%s %s %.2f', 'v1', CompanyName, CompanyId)
, ('Str1' || CompanyName || 'Str2') as ConcatExample
, upper('ZappySys')
, lower('ZappySys')
, replace('ZappySys', 'Sys', 'XYZ')
, instr('ZappySys', 'Sys')
, trim(' Zappy Sys ') trim1
, trim('@@@ZappySys@@@', '@') trim2
, rtrim(' ZappySys ')
, ltrim(' ZappySys ')
, length( CompanyName )
FROM $ WITH (
DATA='CompanyId,CompanyName
1000,ZappySys
1001,Microsoft
1002,Amazon
')
SELECT
COALESCE(10,20) coalesce1 --returns first non-null arg
,COALESCE(null,20) coalesce2 --returns first non-null arg
,COALESCE(null,20,30,40) coalesce3 --returns first non-null arg
,IFNULL(null,20) --returns first non-null arg. Same function as COALESCE but simple (just two arguments allowed)
,NULLIF(20,20) nullif1 --returns null if both argument same
,NULLIF(10,20) nullif2 --returns null if both argument same
FROM $ WITH (
DATA='CompanyId,CompanyName
1000,ZappySys
1001,Microsoft
1002,Amazon
')
SELECT
DATE('now') date_now
,STRFTIME('%Y-%m-%dT%H:%M:%f','now') formatted_Date_time
,DATETIME('now') datetime_now
,DATE('now','localtime') datetime_now_local
,TIME('now') time_now
,JULIANDAY('now')
,DATE('now', 'start of month', '+1 month' , '-1 day' ) dt_modify1
,DATE('now', '+5 day') dt_modify2
FROM $ WITH (
DATA='CompanyId,CompanyName
1000,ZappySys
1001,Microsoft
1002,Amazon
')
SELECT
abs(-500)
,random()
,round(1000.236, 2)
FROM $ WITH (
DATA='CompanyId,CompanyName
1000,ZappySys
1001,Microsoft
1002,Amazon
')
SELECT
regex_ismatch(SSN, '\d{3}-\d{3}-\d{4}') IsValidSSN, --check pattern found
regex_replace(SSN, '\d','*') MaskedSSN, --search/replace pattern
regex_search(SSN, '\d{4}') SSNLast4Digits, --extract substring using pattern search
regex_search(Email, '(?<name>\w+)@(?<domain>\w+.com)',0, 2) DomainOf1stEmailByIndex, --extract 1st email (zero based index) and get domain name (by group name). For 2nd argument you can use numeric index or named argument. Both arguments are zero based index.
regex_search(Email, '(?<name>\w+)@(?<domain>\w+.com)',2, 2) DomainOf3rdEmailByIndex, --extract 3rd email (zero based index) and get 2nd part of match (i.e. domain name). Both arguments are zero based index.
regex_search('a@x.com | b@y.com | c@z.com', '(?<name>\w+)@(?<domain>\w+.com)','-0', 2) DomainOfLastEmail, --extract last email (use negative sign in quote - zero based index) and get 2nd part of match (i.e. domain name). Both arguments are zero based index.
regex_search(
'a@x.com | b@y.com | c@z.com'
, '(?<name>\w+)@(?<domain>\w+.com)'
, '*' --occurrence match index ( * , N or -N ) negative number will do reverse find (e.g. to get last match use -0 , to get second last use -1)
, 2 --group index from match (default is full match or -1)
--, 0 -- ignore case for pattern match (0=strict match, 1=ignore case, default is 0)
--, 0 -- throw error if not matched 0=don't throw error, 1=throw error
--, '#' -- separator for multi match
) GetAllDomains --extract domains from all emails and show as email (zero based index) and get 2nd part of match (i.e. domain name). Both arguments are zero based index.
FROM $ WITH (DATA= 'SSN,Email
111-222-4444,a@x.com | b@y.com | c@z.com
111-X2Z-AB44,a@x.com | b@y.com | c@z.com
')
SELECT * FROM $ WITH(SRC='http://httpbin.org/html?date-para=<<yyyy-MM-dd,FUN_TODAY>>')
SELECT RTRIM('trimmed ') Col1,
DATE('now', '+5 day') Col2
SELECT * FROM $
WITH
(DATA='Name,Age,Income,Hiredate,Log
"Bob",55,5000.00,"2018-01-01","Offer1 \"mirrors\" Drive, LLC."
"Sam",51,2000.00,"2016-02-01","Offer2 \"mirrors\" Drive, LLC."
"John",45,3000.00,"2014-07-01","Offer3 \"mirrors\" Drive, LLC."
'
,ColumnDelimiter=','
,EnableCustomReplace=1
,SearchFor='\"' --//or USE: --regex , --regex-ic (case-insensitive) or no suffix for plain text search.
,ReplaceWith='""'
)
SELECT * FROM $ WITH
(
--//separate URLs or Local Paths using double colon ( :: ) or new line (like below).
--//Example of double colon :: as separator
--//http://a.com/storeid=1::http://a.com/storeid=5
SRC='https://zappysys.com/downloads/files/test/cust-1.csv
https://zappysys.com/downloads/files/test/cust-2.csv',
EnableMultiPathMode='True'
)
SELECT * FROM $
WHERE OrderDate<=DATETIME('1997-12-31 00:00:00') -- OR use DATE('1997-12-31') DateTime column can be queried this way. You must wrap DATETIME function around it. Also must use 'yyyy-MM-dd' or 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd HH:mm:ss.fff' format (where fff is milliseconds)
ORDER BY DATETIME(OrderDate)
WITH (SRC='https://zappysys.com/downloads/files/test/invoices.csv')
SELECT
Country AS Invoice_Country
, SUM(UnitPrice * Quantity) AS Invoice_Total
FROM $
WHERE Discount > 0
--AND OrderDate<=DATETIME('1997-12-31 00:00:00') -- OR use DATE('1997-12-31') DateTime column can be queried this way. You must wrap DATETIME function around it. Also must use 'yyyy-MM-dd' or 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd HH:mm:ss.fff' format (where fff is milliseconds)
GROUP BY Country
HAVING SUM(UnitPrice * Quantity) > 1000
ORDER BY Invoice_Total DESC--,DATETIME(OrderDate)
LIMIT 3
WITH (SRC='https://zappysys.com/downloads/files/test/invoices.csv')
SELECT
Name
, CASE Age
WHEN 55 THEN 55+1
WHEN 51 THEN 51+1
ELSE 0
END ThisIsCaseColumn
FROM $
WITH
(DATA='Name|Age|Income|Hiredate
Bob|55|5000.00|2018-01-01
Sam|51|2000.00|2016-02-01
John|45|3000.00|2014-07-01
'
,ColumnDelimiter='|'
)
SELECT * INTO #tmp FROM $
WITH
(
--enter path in SRC or use static value in DATA
--SRC='http://some/api/data.csv'
--SRC='C:\some*.csv'
--SRC='C:\somefile.csv'
--OR--
DATA='Name|Age|Income|Hiredate
Bob|55|5000.00|2018-01-01
Sam|51|2000.00|2016-02-01
John|45|3000.00|2014-07-01
'
,ColumnDelimiter='|'
);
--//second statement in the same batch
select * from #tmp
where age > 45
--AND SomeDateColumn=DATETIME('2012-12-31 00:00:00') --DateTime column can be queried this way... Must use 'yyyy-MM-dd HH:mm:ss' format
;
SELECT * INTO #cust FROM $
WITH (
--enter path in SRC or use static value in DATA
--SRC='http://some/api/customers.csv'
--SRC='C:\cust*.csv'
--SRC='C:\customers.csv'
DATA='customerid,name
1,AAA
2,BBB
3,CCC
'
);
SELECT * INTO #ord FROM $
WITH (
DATA='orderid,customerid,orderdate,total
1000,1,2012-01-01T00:00:00,2000.50
1001,1,2012-01-02T00:00:00,1000.50
1002,2,2013-01-01T00:00:00,5000.70
1003,2,2013-01-02T00:00:00,6000.70
'
);
--//second statement in the same batch
SELECT c.customerid,o.orderid,o.orderdate,o.total
FROM #cust c
INNER JOIN #ord o ON c.customerid=o.customerid
--LEFT OUTER JOIN #ord o ON c.customerid=o.customerid
--WHERE o.orderdate=DATETIME('2012-01-01 00:00:00') --for datetime column format must be queried in 'yyyy-MM-dd HH:mm:ss' format only
--To Use greater than less than must need to use DATETIME function (e.g. WHERE o.OrderDate<=DATETIME('1997-12-31 23:12:59')
;
SELECT * into #tbl1 FROM $
WITH (
--enter path in SRC or use static value in DATA
--SRC='http://some/api/data.csv'
--SRC='C:\some*.csv'
--SRC='C:\somefile.csv'
DATA='Name|Age|Income|Hiredate
Bob|55|5000.00|2018-01-01
Sam|51|2000.00|2016-02-01'
,ColumnDelimiter='|'
);
SELECT * into #tbl2 FROM $
WITH (DATA='Name|Age|Income|Hiredate
John|45|3000.00|2014-07-01'
,ColumnDelimiter='|'
);
select * from #tbl1
UNION ALL
select * from #tbl2;
--Whenever Possible try to write Simple Query. When you use WHERE / GROUP BY / ORDER BY Expressions. Driver may invoke Client side processing if server side doesnt support that construct.
--For comment use line comment with two dash (e.g. --my comment) or use block comment for multi line comment (e.g. /*my comment*/ )
--Any query must contain at least two required parts
--data source (or table) names and a list of column names
--column names come first (preceded by SELECT keyword)
--table names follow (preceded by FROM keyword)
--Here is the query that returns all rows with all columns (* stands for all columns) from 'Accounts' table
SELECT * FROM Accounts
--Use quoted identifiers when you have space or other character in names (e.g. Column or Table name contains space)
SELECT ID, "Account Name" FROM "Closed Accounts"
SELECT ID, [Account Name] FROM [Closed Accounts]
--returns all rows from 'Accounts' table, each row will have Id and Amount columns
SELECT Id, Amount FROM Accounts
--returns only those rows of 'Accounts' table that meet next condition: Amount is greater or equal to 1000.0
SELECT Id, Amount FROM Accounts WHERE Amount >= 1000.0
--returns only those rows of 'Accounts' table that meet next condition: Amount is greater than 1000 or DepartamentID is equal to 123
SELECT Id, Amount FROM Accounts WHERE (Amount > 1000.0 OR DepartamentID = 123)
--returns only those rows of 'Accounts' table that meet next condition: DepartamentID is equal to 1, 101 or 202
SELECT Id, Amount FROM Accounts WHERE DepartamentID IN (1, 101, 202)
--returns only those rows of 'Accounts' table that meet next condition: DepartamentID is equal to 321 and Amount is less than 100
SELECT Id, Amount FROM Accounts WHERE DepartamentID = 321 AND Amount < 100
--returns only those rows of 'Persons' table that meet next condition: Name column value starts with 'John'
SELECT * FROM Person WHERE Name LIKE 'John%'
--case statement
SELECT
FirstName,
LastName,
CASE Country
WHEN 'US' THEN 'NA'
WHEN 'Canada' THEN 'NA'
WHEN 'India' THEN 'Asia'
WHEN 'China' THEN 'Asia'
ELSE 'Unknown'
END ColRegion
FROM Person
--escaping string values (use of \n \r \t \v allowed)
SELECT * FROM MyTable WITH( Body=@'Line1\nLine2')