① 單表比較復雜的查詢 高分求sql
select * from 表 a,(
select count(1),name from (select distinct name,date from 表where 兩者之間的時間) b group by name having count(1)=(日期差值))
where a.name=b.name
搞定
不太懂你的說明,我QQ就是我名字,QQ上說吧
② 怎麼從一段復雜的SQL中把所有的表都取出來
說個思路:
表名的前面一般是 from +空格 ,from + 回車, 所以先定位from ,然後去掉前面的空格或回車,後面一般是空格或者回車,所以第二步就是從剩下的字元串中取到空格或回車,這樣應該就能取得表名了,如果有多個表就再去判斷','。當然還要判斷left join ,join , right join ,所有的表名就循環取了。
③ SQL 單表復雜查詢問題
SELECT NAame,
Case
WHEN FirstGrade = 'weikao' THEN 'weikao'
WHEN FirstGrade = 'hege' THEN 'HEGE'
WHEN FirstGrade = 'buhege' THEN SecondGrade
END AS Grade
CASE
WHEN FirstGrade = 'weikao' THEN NULL
WHEN FirstGrade = 'hege' THEN FirstTime
WHEN FirstGrade = 'buhege' AND SecondGrade = 'hege' THEN SecondTime
ELSE NULL
END AS [Time]
FROM ACHV
結構如上所示,FirstGrade為初考成績 , SecondGrade為補考成績 Grade為最終需求的成績
同理,FirstTime為初考時間,SecondTime為補考時間,Time為最終需求時間。
④ SQL語句高手進,關於一個比較復雜的存儲過程
題目所述功能要求,可以用一句SQL語句實現,當然如果要傳遞一些參數地濾的話還是需要存儲過程.
語句思路:
1.按dwbh,時間匯總個人表中金額
2.按dwbh,時間匯總單位表中金額
3.將以上兩個匯總結果進行關聯,關聯的條件是相同dwbh、相同時間情況下金額不同的記錄.即可以實現金額不相同的數據篩選出來.
"--"符號為註解,以下語句中的中文欄位為假想欄位,可以替換為實際欄位.關鍵在於理解語句思路.語句如下:
select
GR.dwbh
,
GR.個人表交費時間
as
時間,GR.個人交費總金額,DW.單位交費總金額,(GR.個人交費總金額
-
DW.單位交費總金額)
as
差額
from
(
select
dwbh,個人表交費時間,sum(交費金額)
as
個人交費總金額
--子查詢匯總出個人交費表中的單位、時間、金額,並取別名為GR嵌入From子句中
from
bcd
group
by
dwbh,交費時間
)
as
GR
inner
join
--
將上下兩個子查詢進行內聯
(
select
dwbh,單位表交費時間,sum(交費金額)
as
單位交費總金額
--子查詢匯總出單位交費表中的單位、時間、金額,並取別名為DW嵌入From子句中
from
abc
groub
by
dwbh,交費時間
)
as
DW
on
GR.dwbh
=
DW.dwbh
and
GR.個人表交費時間
=
DW.單位表交費時間
and
GR.個人交費總金額
<>
DW.單位交費總金額
--兩個子查詢內聯的條件是單位編號相同,時間相同,但金額不同的記錄
⑤ 比較復雜的sql語句
如果你的是ACCESS資料庫或者MS SQL資料庫,可以使用視圖來實現,做起來很容易的。你可以試一下。
以下介紹主要方法:
INNER JOIN 運算
組合兩個表中的記錄,只要在公共欄位之中有相符的值。
語法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN 運算可分為以下幾個部分:
部分 說明
table1, table2 記錄被組合的表的名稱。
field1, field2 被聯接的欄位的名稱。若它們不是由數字構成的,則這些欄位必須為相同的數據類型並包含同類數據,但它們無須具有相同的名稱。
compopr 任何的關系比較運運算元:"=," "<," ">," "<=," ">=," 或 "<>."
說明
可以在 FROM 子句中使用INNER JOIN運算。.這是最普通的聯接類型。只要在這兩個表的公共欄位之中有相符值,內部聯接將組合兩個表中的記錄。
可以使用 INNER JOIN 與部門表及員工表選擇每一個部門中的全部員工。反之,可以使用 LEFT JOIN或 RIGHT JOIN運算創建 outer join,從而選擇所有部門(即使有些並沒有員工)或所有員工(即使有些尚未分配到部門)。
若試圖聯接包含 Memo或 OLE Object數據的欄位,會導致錯誤。
可以聯接任何兩個相同類型的數值欄位。例如,可以聯接 AutoNumber和 Long欄位,因為它們類型相似。但不能聯接 Single 和 Double 類型的欄位。
下列示例顯示如何在類標識符欄位聯接類表及產品表:
SELECT CategoryName, ProctName
FROM Categories INNER JOIN Procts
ON Categories.CategoryID = Procts.CategoryID;
在上面的示例中,類標識符是已被聯接的欄位,但是它並不包含在查詢輸出中,因它並非被包含在 SELECT 語句之中。在這個示例中,若要包含聯接欄位,將欄位名包含在 SELECT 語句中, Categories.CategoryID.
也可以使用下列語法,在一個 JOIN 語句中鏈接多個 ON 子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以使用下列語法,嵌套 JOIN 語句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
在一個 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。
⑥ sql表的欄位太多,更新表的時候,sql語句寫起來很復雜,如何解決這個問題
在系統表中查一下待更新的表的欄位信息,如果是SQLServer用syscolumns表,如果是DB2用syscat.columns表,如果是Oracle請使用all_tab_columns。
查出來之後將這些欄位復制到EXCEL,用一個公式生成你要的更新語句,例如="sql=sql & " & A2 & " = '" & B2 & "'" ,最後將公式生成的結果復制到你的代碼中,再稍微改一改就OK了
⑦ 一個極其復雜的sql語句
我沒有你的表結構,我只給你說一下思想.首先你有五個表,get(order_id,id),account(type_id,money),travel(order_id,money),finance(ord_id,money),tourise(id)
有一個問題你沒有說清楚,你要的是兩者比較大於的記錄還是小於的記錄.
下面是你要的SQL語句,你寫的和什麼以及什麼都搞亂了!一定要把你的話寫清楚我才能幫你解決:
select get.order_id,sum(account.money),sum(travel.money)
from get inner join account on get.id=account.type_id
inner join travel on get.order_id=travel.order_id
inner join finance on get.order_id=finance.order_id
inner join tourist on get.order_id=tourist.id
where sum(account.money)>sum(travel.money)
group by get.order_id
因為我沒有你的表結構,你只要看著我的捎改一下就行了!其實並不難,並且你敘述的內容也不是很清楚.