當前位置:首頁 » 編程語言 » sqldiscount
擴展閱讀
2005資料庫遠程訪問設置 2022-05-24 17:08:34

sqldiscount

發布時間: 2022-05-14 15:53:46

Ⅰ 在sql中如何查詢本年剩餘金額,剩餘金額=最大金額-已支出金額

期末金額=期初金額+收入金額-支出金額
跟最大有什麼關系。。

PS:(select t1.maxValue-sum(t5.faceprice*(1-t5.discount)*t5.applyNum) as remainmoney from DOADetail t5 where DATEDIFF (yyyy,t5.insertTime,GETDATE())=0 group by t5.insertTime)

多了括弧要去掉,其他要看錶結構了

Ⅱ SQL中的問題

1. 檢查約束
檢查約束是最常見的約束類型。它允許你聲明在某個欄位里的數值必須使一個布爾表達式為真。比如,要強制一個正數的產品價格,你可以用:
CREATE TABLE procts ( proct_no integer, name text, price numeric CHECK (price > 0) );
如你所見,約束定義在數據類型之後,就好像預設值定義一樣。預設值和約束可以按任意順序排列。一個檢查約束由一個關鍵字 CHECK 後面跟一個放在圓括弧里的表達式組成。檢查約束表達式應該包含受約束的欄位,否則這個約束就沒什麼意義了。
你還可以給這個約束取一個獨立的名字。這樣就可以令錯誤信息更清晰,並且在你需要修改它的時候引用這個名字。語法是:
CREATE TABLE procts ( proct_no integer, name text, price numeric CONSTRAINT positive_price CHECK (price > 0) );
因此,要聲明一個命名約束,使用關鍵字 CONSTRAINT 後面跟一個標識符(作為名字),然後再跟約束定義。如果你不用這個方法聲明約束,那麼系統會自動為你選擇一個名字。
一個檢查約束也可以引用多個欄位。假設你存儲一個正常價格和一個折扣價,並且你想保證折扣價比正常價低。
CREATE TABLE procts ( proct_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric CHECK (discounted_price > 0), CHECK (price > discounted_price) );
頭兩個約束看上去很面熟。第三個使用了一個新的語法。它沒有附著在某個欄位上,而是在逗號分隔的欄位列表中以一個獨立行的形式出現。欄位定義和約束定義可以按照任意順序列出。
我們稱頭兩個約束是"欄位約束",而第三個約束是"表約束"(和欄位定義分開寫)。欄位約束也可以寫成表約束,而反過來很可能不行,因為系統假設欄位約束只引用它所從屬的欄位。PostgreSQL 並不強制這條規則,但是如果你希望自己的表定義可以和其它資料庫系統兼容,那麼你最好還是遵循這條規則。上面的例子也可以這么寫:
CREATE TABLE procts ( proct_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CHECK (price > discounted_price) ); 或者是
CREATE TABLE procts ( proct_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0 AND price > discounted_price) );
這只是風格的不同。
和欄位約束一樣,我們也可以給表約束賦予名稱,方法也相同:
CREATE TABLE procts ( proct_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CONSTRAINT valid_discount CHECK (price > discounted_price) );
我們還要注意的是,當約束表達式計算結果為 NULL 的時候,檢查約束會被認為是滿足條件的。因為大多數表達式在含有 NULL 操作數的時候結果都是 NULL ,所以這些約束不能阻止欄位值為 NULL 。要確保一個欄位值不為 NULL ,可以使用下一節介紹的非空約束。

2. 非空約束
非空約束只是簡單地聲明一個欄位必須不能是 NULL 。下面是一個例子:
CREATE TABLE procts ( proct_no integer NOT NULL, name text NOT NULL, price numeric );
一個非空約束總是寫成一個欄位約束。非空約束在功能上等效於創建一個檢查約束 CHECK (column_name IS NOT NULL) ,但在 PostgreSQL 里,創建一個明確的非空約束效率更高。缺點是你不能給它一個明確的名字。
當然,一個欄位可以有多個約束。只要一個接著一個寫就可以了:
CREATE TABLE procts ( proct_no integer NOT NULL, name text NOT NULL, price numeric NOT NULL CHECK (price > 0) );
它們的順序無所謂。順序並不影響約束檢查的順序。
NOT NULL 約束有個相反的約束:NULL 約束。它並不意味著該欄位必須是空,因為這樣的欄位也沒用。它只是定義了該欄位可以為空的這個預設行為。在 SQL 標准里沒有定義 NULL 約束,因此不應該在可移植的應用中使用它。在 PostgreSQL 裡面增加這個約束只是為了和其它資料庫系統兼容。不過,有些用戶喜歡它,因為這個約束可以讓他們很容易在腳本文件里切換約束。比如,你可以從下面這樣開始
CREATE TABLE procts ( proct_no integer NULL, name text NULL, price numeric NULL );
然後在需要的時候插入 NOT 關鍵字。

【提示】在大多數資料庫設計里,主要的欄位都應該標記為非空。

3. 唯一約束
唯一約束保證在一個欄位或者一組欄位里的數據與表中其它行的數據相比是唯一的。它的語法是:
CREATE TABLE procts ( proct_no integer UNIQUE, name text, price numeric );
上面是寫成欄位約束,下面這個則寫成表約束:
CREATE TABLE procts ( proct_no integer, name text, price numeric, UNIQUE (proct_no) );
如果一個唯一約束引用一組欄位,那麼這些欄位用逗號分隔列出:
CREATE TABLE example ( a integer, b integer, c integer, UNIQUE (a, c) );
這樣就聲明了特定欄位值的組合在整個表范圍內是唯一的。但是這些欄位中的某個單獨值可以不必是(並且通常也確實不是)唯一的。
你也可以給唯一約束賦予一個自己定義的名字,方法與前面相同:
CREATE TABLE procts ( proct_no integer CONSTRAINT must_be_different UNIQUE, name text, price numeric );
通常,如果包含在唯一約束中的那幾個欄位在表中有多個相同的行,就違反了唯一約束。但是在這種比較中,NULL 被認為是不相等的。這就意味著,在多欄位唯一約束的情況下,如果在至少一個欄位上出現 NULL ,那麼我們還是可以存儲同樣的這種數據行。這種行為遵循 SQL 標准,但是我們聽說其它 SQL 資料庫可能不遵循這個標准。因此如果你要開發可移植的程序,那麼最好仔細些。

4. 主鍵
從技術上講,主鍵約束只是唯一約束和非空約束的組合。所以,下面兩個表定義是等價的:
CREATE TABLE procts ( proct_no integer UNIQUE NOT NULL, name text, price numeric ); CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric );
主鍵也可以約束多於一個欄位;其語法類似於唯一約束:
CREATE TABLE example ( a integer, b integer, c integer, PRIMARY KEY (a, c) );
主鍵表示一個或多個欄位的組合可以用於唯一標識表中的數據行。這是定義一個主鍵的直接結果。請注意:一個唯一約束實際上並不能提供一個唯一標識,因為它不排除 NULL 。這個功能對文檔目的和客戶應用都很有用。比如,一個可以修改行數值的 GUI 應用可能需要知道一個表的主鍵才能唯一地標識每一行。
一個表最多可以有一個主鍵(但是它可以有多個唯一和非空約束)。關系型資料庫理論告訴我們,每個表都必須有一個主鍵。PostgreSQL 並不強制這個規則,但我們最好還是遵循它。

5. 外鍵
外鍵約束聲明一個欄位(或者一組欄位)的數值必須匹配另外一個表中出現的數值。我們把這個行為稱為兩個相關表之間的參照完整性。
假設你有個產品表,我們可能使用了好幾次:
CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric );
假設你有一個存儲這些產品的訂單的表。我們想保證訂單表只包含實際存在的產品。因此我們在訂單表中定義一個外鍵約束引用產品表:
CREATE TABLE orders ( order_id integer PRIMARY KEY, proct_no integer REFERENCES procts (proct_no), quantity integer );
現在,我們不能創建任何其 proct_no 沒有在產品表中出現的訂單。
在這種情況下我們把訂單表叫做引用表,而產品表叫做被引用表。同樣,也有引用欄位和被引用欄位。
你也可以把上面的命令簡寫成
CREATE TABLE orders ( order_id integer PRIMARY KEY, proct_no integer REFERENCES procts, quantity integer );
因為如果缺少欄位列表的話,就會引用被引用表的主鍵。
一個外鍵也可以約束和引用一組欄位。同樣,也需要寫成表約束的形式。下面是一個捏造出來的語法例子:
CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES other_table (c1, c2) );
當然,被約束的欄位數目和類型需要和被引用欄位數目和類型一致。
和平常一樣,你也可以給外鍵約束賦予自定義的名字。
一個表可以包含多於一個外鍵約束。這個特性用於實現表之間的多對多關系。比如你有關於產品和訂單的表,但現在你想允許一個訂單可以包含多種產品(上面那個結構是不允許這么做的),你可以使用這樣的結構:
CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( proct_no integer REFERENCES procts, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (proct_no, order_id) );
注意最後的表的主鍵和外鍵是重疊的。
我們知道外鍵不允許創建和任何產品都無關的訂單。但是如果一個訂單創建之後其引用的產品被刪除了怎麼辦?SQL 也允許你處理這個問題。簡單說,我們有幾種選擇:

不允許刪除一個被引用的產品
同時也刪除訂單
其它的?
為了說明這個問題,我們對上面的多對多關系制定下面的策略:如果有人想刪除一種仍然被某個訂單引用的產品(通過 order_items),那麼就不允許這么做。如果有人刪除了一個訂單,那麼訂單項也被刪除。
CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( proct_no integer REFERENCES procts ON DELETE RESTRICT, order_id integer REFERENCES orders ON DELETE CASCADE, quantity integer, PRIMARY KEY (proct_no, order_id) );
限制和級聯刪除是兩種最常見的選項。RESTRICT 禁止刪除被引用的行。NO ACTION 的意思是如果在檢查約束的時候還存在任何引用行,則拋出錯誤;如果你不聲明任何東西,那麼它就是預設的行為。這兩個選擇的實際區別是:NO ACTION 允許約束檢查推遲到事務的晚些時候,而 RESTRICT 不行。CASCADE 聲明在刪除一個被引用的行的時候,所有引用它的行也會被自動刪除掉。在外鍵欄位上的動作還有兩個選項:SET NULL 和 SET DEFAULT ,它們導致在被引用行刪除的時候,將引用它們的欄位分別設置為 NULL 和預設值。請注意這些選項並不能讓你逃脫被觀察和約束的境地。比如,如果一個動作聲明 SET DEFAULT ,但是預設值並不能滿足外鍵,那麼該動作就會失敗。
與 ON DELETE 類似的還有 ON UPDATE 選項,它是在被引用欄位修改(更新)的時候調用的,可用的動作是一樣的。
有關更新和刪除數據的更多信息可以在章6里找到。
最後,我們應該說明的是,一個外鍵必須要麼引用一個主鍵,要麼引用一個唯一約束。如果外鍵引用了一個唯一約束,那麼在如何匹配 NULL 這個問題上還有一些其它的可能性。這些東西都在 CREATE TABLE 中解釋。

Ⅲ SQL語言中,用create table 建表時,其中的欄位「折扣 類型 N 長度4 小數2」怎麼寫

create table 表名 (折扣 number(4),check (round(折扣,2)));
insert into 表名(折扣)
values(40.223402);
折扣
40.22

Ⅳ SQL資料庫 將所有折扣為80%的訂單價格上調20%

你改成這樣試試看
UPDATE orderdetails SET
orderdetails.UnitPrice = (orderdetails.UnitPrice) * 1.2 WHERE (((orderdetails.Discount )=0.8));

Ⅳ sql="select discount_value from shop_discount where discount_begin_value

sql="select discount_value from shop_discount where discount_begin_value<"&sumvalue&" >="&sumvalue
必須這樣,只能分2次

Ⅵ 我想在SQL里建一個視圖,有三張表 ,需要從這三張表裡取數據

SELECT
--quantity,discountprice,abbrev,--這三個不需要麼?
customer_id,checkdate,SUM(xiaoshoue)
FROM(
SELECT
A.checkid,customer_id,checkdate,
quantity,discountprice,
abbrev,
quantity*discountpriceASxiaoshoue
FROM
CHECKA
FULLJOINCHECKGOODSONA.CHECKID=B.CHECKID
FULLJOINcustomerCONA.customer_id=C.customer_id
)TAL
GROUPBY
--quantity,discountprice,abbrev,
customer_id,checkdate


因為沒有具體的表環境,無法實測。

希望你能看懂上面的關鍵的代碼,然後自個去學會相關關鍵詞的意義,理解後再去調試。

Ⅶ sql 取值范圍

也就是說下邊界不一定是0,可能出現-1000,或者-100000,那麼就寫一個很小的數,比如 -999999999999,我就不信有比這個還小的。
或者分開寫用or連接
select * from wap_shiwu_point_info p where p.isvalid=1 and (p.shiwu_discount_points between 0 and #{userablePoints} or p.shiwu_discount_points <=0)
p.shiwu_discount_points <=0應該是沒有問題的吧。
或者把<=分開,分成<和等於,這樣可能也能解決問題,無非就是換種寫法而已。

Ⅷ SQL中去空格函數

這個好辦啊,你自己寫一個函數,然後調用sql中的ltrim,rtrim,然後用raplace把欄位中空格都去掉,你再調用自己的函數就可以了啊。

Ⅸ SQL這張表怎麼用語句建啊求大神來看看。

以下是在SQLServer中實現的

CREATETABLE[dbo].[bookin](
[bookno][nchar](10)NOTNULL,
[Guest_id][nchar](18)NOTNULL,
[Roomno][nchar](10)NOTNULL,
[Staydate][datetime]NULL,
[Returndate][datetime]NULL,
[discount][numeric](18,0)NULL,
[ammount][numeric](18,0)NULL,
CONSTRAINT[PK_bookin_1]PRIMARYKEYCLUSTERED
(
[bookno]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]

GO
---以下兩個語句建立外鍵
ALTERTABLE[dbo].[bookin]WITHCHECKADDCONSTRAINT[FK_bookin_rooms]FOREIGNKEY([Roomno])
REFERENCES[dbo].[rooms]([Roomno])
GO

ALTERTABLE[dbo].[bookin]CHECKCONSTRAINT[FK_bookin_rooms]
GO

Ⅹ sql discount怎麼使用

在set前應該漏了「update xxx 」這樣的半句吧?如果是這樣的話,那這里的discount和lowqty都應該是update後指定的那個表的欄位而已,這個語句意思是讓xxx表中id和discounts表中第三行(除了前兩行以外的第一行)數據id相同的行的discount值為原有值+0.5且lowqty為原有值+200,discount和lowqty應該都是你漏掉的update關鍵字後的表名對應的表的列名。

ps: 不只漏了update關鍵詞,「(SELECT TOP 1 *」 這里的這個*也應該是id才對