『壹』 請教一段sql語句的含義
select
a.splanno,a.addid,a.itemno,
b.itemname,b.descript,
c.msname,
a.planqty,a.plansum,a.rcvqty,a.rcvsum,
a.planqty - a.rcvqty celqty,
a.plansum - a.rcvsum celsum
from
(
select
a.splanno,a.addid,a.itemno,
sum(isnull(a.planqty,0)) planqty,sum(isnull(a.plansum,0)) plansum,sum(isnull(a.rcvqty,0)) rcvqty,
sum(isnull(a.untaxrcvsum,0)) rcvsum
from
(select
a.splanno,case when a.addid = 1 then 1 when a.addid > 1 then 2 end addid,
a.itemno,a.planqty,a.plansum,a.spurno,a.lineid,b.rcvqty,
b.untaxrcvsum from
(select a.splanno,a.addid,a.itemno,a.planqty,a.plansum,b.spurno,b.lineid from
(select splanno,addid,itemno,planqty,plansum plansum from purplandet
where splanno in (select distinct splanno from purplanmst where cyc_code='0004')) a
left outer join
purdec b
on a.splanno=b.refsysno and a.addid=b.refaddsysno and a.itemno=b.itemno
) a
left outer join
rcvdet b
on a.spurno=b.purno and a.lineid=b.refrow and a.itemno=b.itemno
) a
group by a.splanno,a.addid,a.itemno
) a,
itemdata b,msunit c
where a.itemno=b.itemno and b.msunit=c.msunit
order by a.splanno,a.addid,a.itemno
1.先對SQl語句進行整理提高可讀性
2.針對幾個簡單的概念和簡單函數先了解
(a).別名(表的別名 以及欄位的別名):
上述例子中 如itemdata b 即定義表itemdata 為名稱b 這樣在第一個select中b.itemname即是查詢的為itemdata.itemname
a.planqty - a.rcvqty celqty就是對前面的計算結果 以celqty欄位名稱作為顯示
(b).isnull
如果第一個參數值為空,默認顯示第二個欄位值
(c).sum
欄位加總
(d).left join
表關聯,配合on條件
(e).group by
分組欄位
(f).case when
SQL中的if else
3.SQL解析(因為不知道你的表具體含義只能通過SQL單純的看)
(a). 一層一層來看的話,最外層查詢的含義是
查詢第一層子查詢中的splanno,addid,itemno,
planqty,plansum,arcvqty,rcvsum,planqty - rcvqty,
plansum - rcvsum
以及itemdata 中的itemname,descript,和msunit表中的msname,
a表是通過itemno和itemdata 表關聯,itemdata 表再通過msunit和msunit表關聯
最後按照a表中splanno,addid,itemno進行升序排序
(b).from里層主要是查詢最外層所定義的a表
(b1).直接看最里層的SQL查詢
select a.splanno,a.addid,a.itemno,a.planqty,a.plansum,b.spurno,b.lineid from
(select splanno,addid,itemno,planqty,plansum plansum from purplandet
where splanno in (select distinct splanno from purplanmst where cyc_code='0004')) a
left outer join
purdec b
on a.splanno=b.refsysno and a.addid=b.refaddsysno and a.itemno=b.itemno) a
查詢purplandet 中splanno 對應的cyc_code為0004的相關資料並關聯purdec 查詢對應欄位
(b2).以上查詢出後會在關聯rcvdet 查出需要欄位
(b3).通過對a.splanno,a.addid,a.itemno的分組,統計對應欄位的加總信息
不知道這樣說明是否OK? 另外 建議盡量避免子查詢 會影響效能
~~排版有點亂 湊合著看吧
『貳』 sql語句寫法
朋友,一樓的回答,您的理解是錯誤的。
in語句,本身就是or,而不是and。in ('0102','0202'),就是表示部門號等於其中任何一個都符合條件的情況,所以一樓寫的這個寫法是正確的,你查不到肯定是別的原因。
如果你覺得不對,你可以試試select s.部門名,s.領用人,s.儀器名稱,s.型號,s.單價,s.存放地 from s where s.部門號 in ('0102','0202'),這個肯定是可以查詢出來這兩個的。
除了使用in的寫法,還可以使用另外的寫法。
select s.部門名,s.領用人,s.儀器名稱,s.型號,s.單價,s.存放地 from s, users u where s.部門號= u.unit and u.user_id = '01'
這個寫法肯定也是可以的。
『叄』 SQL函數的函數介紹
Aggregate函數的操作面向一系列的值,並返回一個單一的值。
注釋:如果在 SELECT 語句的項目列表中的眾多其它表達式中使用 SELECT 語句,則這個 SELECT 必須使用 GROUP BY 語句! 函數 描述 AVG(column) 返回某列的平均值 COUNT(column) 返回某列的行數(不包括 NULL 值) COUNT(*) 返回被選行數 FIRST(column) 返回在指定的域中第一個記錄的值 LAST(column) 返回在指定的域中最後一個記錄的值 MAX(column) 返回某列的最高值 MIN(column) 返回某列的最低值 STDEV(column) 返回某列的標准偏差 STDEVP(column) 返回某列總體的標准偏差 SUM(column) 返回某列的總和 VAR(column) 返回某列非NULL值的方差 VARP(column) 返回某列所有非NULL值的總體方差 【示例】 Name Age Adams, John 38 Bush, George 33 Carter, Thomas 28 AVG 函數返回數值列的平均值。NULL 值不包括在計算中。
SELECT AVG(column_name) FROM table_name
我們擁有 Orders 表(示例1):
我們希望計算 OrderPrice 欄位的平均值。
我們使用如下 SQL 語句:
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders結果集類似這樣: OrderAverage 950 示例2
我們希望找到 OrderPrice 值高於 OrderPrice 平均值的客戶。
我們使用如下 SQL 語句:
SELECT Customer FROM OrdersWHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)結果集類似這樣: Customer Bush Carter Adams COUNT() 函數COUNT() 函數返回匹配指定條件的行數。 FORMAT 函數用於對欄位的顯示進行格式化。
SELECT FORMAT(column_name,format) FROM table_name 參數 描述 column_name 必需。要格式化的欄位。 format 必需。規定格式。 我們擁有下面這個 Procts 表: Prod_Id ProctName Unit UnitPrice 1 gold 1000 g 32.35 2 silver 1000 g 11.56 3 copper 1000 g 6.85 我們希望顯示每天日期所對應的名稱和價格(日期的顯示格式是 YYYY-MM-DD)。
我們使用如下 SQL 語句:
SELECT ProctName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDateFROM Procts結果集類似這樣: ProctName UnitPrice PerDate gold 32.35 12/29/2008 silver 11.56 12/29/2008 copper 6.85 12/29/2008 LAST() 函數返回指定的欄位中最後一個記錄的值。
提示:可使用 ORDER BY 語句對記錄進行排序。
SELECT LAST(column_name) FROM table_name
實例1 Orders 表:
我們希望查找 OrderPrice 列的最後一個值。
我們使用如下 SQL 語句:
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders結果集類似這樣: LastOrderPrice 100 LCASE 函數把欄位的值轉換為小寫。
SELECT LCASE(column_name) FROM table_name
我們擁有下面這個 Persons 表: Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing 我們希望選取 LastName 和 FirstName 列的內容,然後把 LastName 列轉換為小寫。
我們使用如下 SQL 語句:
SELECT LCASE(LastName) as LastName,FirstName FROM Persons結果集類似這樣: LastName FirstName adams John bush George carter Thomas LEN 函數返迴文本欄位中值的長度。
SELECT LEN(column_name) FROM table_name
同上有 Persons 表:
我們希望取得 City 列中值的長度。
我們使用如下 SQL 語句:
SELECT LEN(City) as LengthOfCity FROM Persons結果集類似這樣: LengthOfCity 6 8 7 MAX 函數返回一列中的最大值。NULL 值不包括在計算中。
SELECT MAX(column_name) FROM table_name注釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。
實例1Orders 表:
我們希望查找 OrderPrice 列的最大值。
我們使用如下 SQL 語句:
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders結果集類似這樣: LargestOrderPrice 2000 MID 函數用於從文本欄位中提取字元。
SELECT MID(column_name,start[,length]) FROM table_name 參數 描述 column_name 必需。要提取字元的欄位。 start 必需。規定開始位置(起始值是 1)。 length 可選。要返回的字元數。如果省略,則 MID() 函數返回剩餘文本。 同上有 Persons 表:
我們希望從 City 列中提取前 3 個字元。
我們使用如下 SQL 語句:
SELECT MID(City,1,3) as SmallCity FROM Persons結果集類似這樣: SmallCity Lon New Bei MIN 函數返回一列中的最小值。NULL 值不包括在計算中。
SELECT MIN(column_name) FROM table_name注釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。
實例1 Orders 表:
我們希望查找 OrderPrice 列的最小值。
我們使用如下 SQL 語句:
SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders結果集類似這樣: SmallestOrderPrice 100 NOW 函數返回當前的日期和時間間
SELECT NOW() FROM table_name
貌似沒有這函數。
我們擁有下面這個 Procts 表: Prod_Id ProctName Unit UnitPrice 1 gold 1000 g 32.35 2 silver 1000 g 11.56 3 copper 1000 g 6.85 我們希望顯示當天的日期所對應的名稱和價格。
我們使用如下 SQL 語句:
SELECT ProctName, UnitPrice, Now() as PerDate FROM Procts結果集類似這樣: ProctName UnitPrice PerDate gold 32.35 12/29/2008 11:36:05 AM silver 11.56 12/29/2008 11:36:05 AM copper 6.85 12/29/2008 11:36:05 AM ROUND 函數用於把數值欄位舍入為指定的小數位數。
SELECT ROUND(column_name,decimals) FROM table_name 參數 描述 column_name 必需。要舍入的欄位。 decimals 必需。規定要返回的小數位數。 Procts 表:
我們希望把名稱和價格舍入為最接近的整數。
我們使用如下 SQL 語句:
SELECT ProctName, ROUND(UnitPrice,0) as UnitPrice FROM Procts結果集類似這樣: ProctName UnitPrice gold 32 silver 12 copper 7 SUM 函數返回數值列的總數(總額)。
SELECT SUM(column_name) FROM table_name
實例1 Orders 表:
我們希望查找 OrderPrice 欄位的總數。
我們使用如下 SQL 語句:
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders結果集類似這樣: OrderTotal 5700 GROUP BY 語句合計函數 (比如SUM) 常常需要添加 GROUP BY 語句。 UCASE 函數把欄位的值轉換為大寫。
SELECT UCASE(column_name) FROM table_name
Persons 表:
我們希望選取 LastName 和 FirstName 列的內容,然後把 LastName 列轉換為大寫。
我們使用如下 SQL 語句:
SELECT UCASE(LastName) : LastName FirstName ADAMS John BUSH George CARTER Thomas
『肆』 sql中如何使用語句
use Tempdb
go
--> -->
if not object_id('xssj') is null
drop table xssj
Go
Create table xssj([unitcode] int,[operator] nvarchar(2),[money] int,[type] nvarchar(5))
Insert xssj
select 1,N'小文',2400,N'團購' union all
select 2,N'小李',3400,N'經銷' union all
select 3,N'小文',1200,N'經銷' union all
select 5,N'小李',3500,N'團購' union all
select 9,N'小王',4900,N'名煙名酒店' union all
select 12,N'小劉',1200,N'團購' union all
select 14,N'小文',5000,N'批發' union all
select 19,N'小文',9000,N'團購'
Go
Select [operator],
[團購]=sum(case when [type]=N'團購' then [money] else 0 end),
[經銷]=sum(case when [type]=N'經銷' then [money] else 0 end),
[批發]=sum(case when [type]=N'批發' then [money] else 0 end),
[合計]=sum([money])
from xssj group by [operator]
operator 團購 經銷 批發 合計
-------- ----------- ----------- ----------- -----------
小文 11400 1200 5000 17600
小王 0 0 0 4900
小李 3500 3400 0 6900
小劉 1200 0 0 1200
(4 個資料列受到影響)
動態這樣就行了
declare @s nvarchar(4000)
set @s='select [operator]'
select @s=@s+','+quotename([type])+N'=sum(case when [type] = N'''+[type]+''' then [money] else 0 end)'
from xssj group by [type]
exec(@s+N',sum([money]) as 合計 from xssj group by [operator]')
『伍』 請教SQL語句
select unitid,count(unitid) from article_act where unitid<>'' and month(updatetime)=month(getdate()) and year(updatetime)=year(getdate()) group by unitid order by count(unitid) desc
這樣寫不可能錯的啊,如果錯的,你把你錯誤結果貼上來看看
『陸』 sql server 2008查詢a,b兩張表的數據,用unit連接起來後排序 。排序的欄位在a表中查詢欄位類型為int,b表
int最多存32位, smallint最多能存16位,
就是容量不一樣。
排序不影響!
『柒』 sql語句 union用法
因為union查詢後會合並相同的記錄,select *是所有欄位記錄相同才合並,其中的date欄位值可以相同,而select date的時候,只要date相同就會合並,date值是唯一的。所以查詢結果是不同的。
『捌』 sql語句,大神求解釋,看不懂
這就是普通的select語句啊,只是加了嵌套和連接,看起來比較龐大而已,你想看清楚可以分層次去查詢,一塊一塊的看就好理解了。
『玖』 SQL語句把同一個表中的a欄位中的數據復制到另一個欄位b中
SQL語句把同一個表中的a欄位中的數據復制到另一個欄位b中可以使用update語句,例如:
update cust set s8_16=unit , unit='';
上述語句將unit欄位內容更新到s8_16欄位內,然後將unit欄位內容置為了空。
(9)unit的sql用法擴展閱讀
SQL UPDATE 語句用法介紹:
UPDATE 語句用於更新表中已存在的記錄。
SQL UPDATE 語法
UPDATEtable_name
SETcolumn1=value1,column2=value2,...
WHEREsome_column=some_value;
注意 SQL UPDATE 語句中的 WHERE 子句!WHERE 子句規定哪條記錄或者哪些記錄需要更新。如果省略了 WHERE 子句,所有的記錄都將被更新 。
『拾』 SQL的語法 詳細 介紹
SELECT 子句
指定由查詢返回的列。
語法
SELECT [ ALL | DISTINCT ]
[ TOP n [ PERCENT ] [ WITH TIES ] ]
< select_list >
< select_list > ::=
{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [ AS ] column_alias ]
| column_alias = expression
} [ ,...n ]
參數
ALL
指定在結果集中可以顯示重復行。ALL 是默認設置。
DISTINCT
指定在結果集中只能顯示唯一行。為了 DISTINCT 關鍵字的用途,空值被認為相等。
TOP n [PERCENT]
指定只從查詢結果集中輸出前 n 行。n 是介於 0 和 4294967295 之間的整數。如果還指定了 PERCENT,則只從結果集中輸出前百分之 n 行。當指定時帶 PERCENT 時,n 必須是介於 0 和 100 之間的整數。
如果查詢包含 ORDER BY 子句,將輸出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查詢沒有 ORDER BY 子句,行的順序將任意。
WITH TIES
指定從基本結果集中返回附加的行,這些行包含與出現在 TOP n (PERCENT) 行最後的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,則只能指定 TOP ...WITH TIES。
< select_list >
為結果集選擇的列。選擇列表是以逗號分隔的一系列表達式。
*
指定在 FROM 子句內返回所有表和視圖內的所有列。列按 FROM 子句所指定的由表或視圖返回,並按它們在表或視圖中的順序返回。
table_name | view_name | table_alias.*
將 * 的作用域限制為指定的表或視圖。
column_name
是要返回的列名。限定 column_name 以避免二義性引用,當 FROM 子句中的兩個表內有包含重復名的列時會出現這種情況。例如,Northwind 資料庫中的 Customers 和 Orders 表內都有名為 ColumnID 的列。如果在查詢中聯接這兩個表,可以在選擇列表中將客戶 ID 指定為 Customers.CustomerID。
expression
是列名、常量、函數以及由運算符連接的列名、常量和函數的任意組合,或者是子查詢。
IDENTITYCOL
返回標識列。有關更多信息,請參見 IDENTITY(屬性)、ALTER TABLE 和 CREATE TABLE。
如果 FROM 子句中的多個表內有包含 IDENTITY 屬性的列,則必須用特定的表名(如 T1.IDENTITYCOL)限定 IDENTITYCOL。
ROWGUIDCOL
返回行全局唯一標識列。
如果在 FROM 子句中有多個表具有 ROWGUIDCOL 屬性,則必須用特定的表名(如 T1.ROWGUIDCOL)限定 ROWGUIDCOL。
column_alias
是查詢結果集內替換列名的可選名。例如,可以為名為 quantity 的列指定別名,如"Quantity"或"Quantity to Date"或"Qty"。
別名還可用於為表達式結果指定名稱,例如:
USE Northwind
SELECT AVG(UnitPrice) AS 'Average Price'
FROM [Order Details]
column_alias 可用於 ORDER BY 子句。然而,不能用於 WHERE、GROUP BY 或 HAVING 子句。如果查詢表達式是 DECLARE CURSOR 語句的一部分,則 column_alias 不能用在 FOR UPDATE 子句中。
INTO 子句
創建新表並將結果行從查詢插入新表中。
用戶若要執行帶 INTO 子句的 SELECT 語句,必須在目的資料庫內具有 CREATE TABLE 許可權。SELECT...INTO 不能與 COMPUTE 子句一起使用。有關更多信息,請參見事務和顯式事務。
通過在 WHERE 子句中包含 FALSE 條件,可以使用 SELECT...INTO 創建沒有數據的相同表定義(不同表名)。
語法
[ INTO new_table ]
參數
new_table
根據選擇列表中的列和 WHERE 子句選擇的行,指定要創建的新表名。new_table 的格式通過對選擇列表中的表達式進行取值來確定。new_table 中的列按選擇列表指定的順序創建。new_table 中的每列有與選擇列表中的相應表達式相同的名稱、數據類型和值。
當選擇列表中包含計算列時,新表中的相應列不是計算列。新列中的值是在執行 SELECT...INTO 時計算出的。
在此次發布的 SQL Server 版本中,select into/bulk 資料庫選項對是否可以使用 SELECT INTO 創建永久表沒有影響。對包括 SELECT INTO 在內的某些大容量操作的記錄量,取決於對資料庫有效的恢復模式。有關更多信息,請參見使用恢復模型。
在以前發布的版本中,如果設置了 select into/bulk ,則可用 SELECT INTO 創建永久表。