A. 怎麼用sql商品庫存明細表
示例如下:
--明細帳數據
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --產品編號
Quantity int, --交易數量
Flag bit, --交易標志,1代表入庫,0代表出庫,這樣可以有效區分退貨(負數)
Date datetime) --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--查詢時間段定義
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--查詢
--統計時間段內無發生額的數據(如果這個不是查詢需要的,去掉這段查詢)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定時間段內有交易發生的數據
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--結果
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
望樓主採納
沈陽金蝶財務為您解答
B. sql中如何查詢出一批訂單明細但是明細的總和等於指定的值
查詢order表,根據order_id分組累計統計order_price的值,與此同事根據ctime排序來累計統計。得到從第一行到當前行的order_price的加和。然後得到累計和是5000的數據行,然後從這個數據行中獲取ctime;然後從order表中查詢數據條件是ctime<=獲取到的ctime的值。此時得到的結果集合中,所有的行的order_price的加和就是5000。
select * from order where ctime<=
select ctime from (
select *, sum(order_price) over(partiton by order_id order by ctime asc) as sum_price
) as x where x.sum_price = 5000
C. 怎麼用sql商品庫存明細表
示例如下:
--明細帳數據
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --產品編號
Quantity int, --交易數量
Flag bit, --交易標志,1代表入庫,0代表出庫,這樣可以有效區分退貨(負數)
Date datetime) --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--查詢時間段定義
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--查詢
--統計時間段內無發生額的數據(如果這個不是查詢需要的,去掉這段查詢)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定時間段內有交易發生的數據
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--結果
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
--*/
D. 用SQL語句寫出庫存交易明細帳類型的報表,該如何書寫呈現下面的顯示形式
select MX001,decode(MX003,'1','入庫','出庫') rck,Mx002,MX004 ,
sum(decode(mx003,'1',mx002,0)-decode(mx003,'-1',mx002,0)) over(order by mx001,mx004) aa
from JYMX t
E. 怎麼用sql商品庫存明細表
入庫有 采購入庫單(Pur),其他入庫(QP),調撥入庫單(DP)
出庫有 銷售出庫單(Sa),其他出庫單(QS),調撥出庫單(DS)
還有一張庫存初始化單據(CSH)
這幾張表 根據物料ID(MaterialID),倉庫ID(FWarehouseID)進行聯合,實現先進先出法,調撥單只是修改相應單據的數量(采購入庫單或庫存初始化單
F. sql語句查詢某欄位的數據總和,並列出表中的所有記錄。
1、首先,創建一個測試表,相關代碼如下,進入下一步。
G. sql中怎麼求一個表的明細固定列
通過SSMS添加、修改或刪除,也可以通過系統視圖查詢。
表或表欄位等的注釋,是資料庫對象的擴展屬性。在MSSQL中,支持把一些注釋性的內容放到資料庫或資料庫對象中,增強可讀性,有助於日後的管理和維護工作。擴展屬性的內容可以通過SSMS添加、修改或刪除,也可以通過系統視圖查詢,通過執行相關的存儲過程來維護。
在資料庫應用開發中,我們經常需要面對復雜的SQL式計算,固定分組就是其中一種。固定分組的分組依據不在待分組的數據中,而是來自於外部,比如另一張表、外部參數、條件列表等。對於特定類型的固定分組,用SQL實現還算簡單(比如:分組依據來自另一張表,且對分組次序沒有要求),但對於比較通用、靈活的要求,實現起來就困難了。
H. 怎麼用sql商品庫存明細表
--明細帳數據
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --產品編號
Quantity int, --交易數量
Flag bit, --交易標志,1代表入庫,0代表出庫,這樣可以有效區分退貨(負數)
Date datetime) --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--查詢時間段定義
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--查詢
--統計時間段內無發生額的數據(如果這個不是查詢需要的,去掉這段查詢)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定時間段內有交易發生的數據
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--結果
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
--*/
itjob祝你成功
I. 怎麼用sql商品庫存明細表
示例如下: --明細帳數據 CREATE TABLE tb( ID int IDENTITY PRIMARY KEY, Item varchar(10), --產品編號 Quantity int, --交易數量 Flag bit, --交易標志,1代表入庫,0代表出庫,這樣可以有效區分退貨(負數) Date datetime)
J. SQL指令如何查詢數據表中最新版本號對應的明細內容
一、數據准備
以Microsoft SQL Server資料庫管理系統為例。
假設對應的數據表名稱為TestTable,表結構如下所示:
CREATETABLETestTable
(
[品牌] VARCHAR(20),
[版本號] INT,
[顏色] VARCHAR(10)
)
添加樣例數據的SQL代碼如下:
INSERTINTOTestTableVALUES('三星',1,'黑')
INSERTINTOTestTableVALUES('三星',1,'白')
INSERTINTOTestTableVALUES('三星',1,'灰')
INSERTINTOTestTableVALUES('三星',1,'藍')
INSERTINTOTestTableVALUES('三星',1,'紅')
INSERTINTOTestTableVALUES('蘋果',1,'黑')
INSERTINTOTestTableVALUES('蘋果',1,'白')
INSERTINTOTestTableVALUES('HTC',1,'黑')
INSERTINTOTestTableVALUES('HTC',1,'白')
INSERTINTOTestTableVALUES('HTC',1,'灰')
INSERTINTOTestTableVALUES('HTC',1,'藍')
INSERTINTOTestTableVALUES('HTC',1,'紅')
INSERTINTOTestTableVALUES('三星',2,'黑')
INSERTINTOTestTableVALUES('三星',2,'白')
INSERTINTOTestTableVALUES('HTC',2,'黑')
INSERTINTOTestTableVALUES('HTC',2,'白')
INSERTINTOTestTableVALUES('HTC',3,'黑')
INSERTINTOTestTableVALUES('HTC',3,'白')
INSERTINTOTestTableVALUES('HTC',3,'灰')
INSERTINTOTestTableVALUES('HTC',3,'藍')
INSERTINTOTestTableVALUES('HTC',3,'紅')
二、思路
查詢所有數據行,對結果集按「品牌」分組,比較分組後的每行的版本號是否是同一品牌的最新版本號,若不是則從結果集中剔除。
GROUPBY分組列
HAVING分組後的條件子句
三、實現步驟
完整的SQL代碼如下:
SELECT t1.[品牌],t1.[版本號],t1.[顏色]
FROM TestTablet1
GROUPBY t1.[品牌],t1.[版本號],t1.[顏色]
HAVING t1.[版本號]=( SELECT MAX(t2.[版本號])
FROM TestTablet2
WHERE t1.[品牌]=t2.[品牌])
四、運行測試
運行結果:
品牌版本號顏色
-----------------------------------------
蘋果1白
蘋果1黑
三星2白
三星2黑
HTC3白
HTC3黑
HTC3紅
HTC3灰
HTC3藍
(9行受影響)