⑴ sqlserver怎麼連接兩個不同的資料庫裡面的兩個不同的表進行關聯查詢,兩個資料庫不在同一個伺服器
這個簡單,使用sqlserver的 OPENDATASOURCE 函數,開啟另外一個資料庫的臨時鏈接就可以了。不過那台伺服器的資料庫必須開啟了IP訪問。
⑵ sqlserver多表聯合查詢
select aa.a_name as 名字,count(aa.a_name) as 數量 from a aa,b bb where aa.a_id = bb.a_id group by aa.a_name
⑶ sqlserver 多表查詢不同資料庫伺服器上的表
第一種方法:
復制代碼代碼如下:
/*
創建鏈接伺服器
*/
exec
sp_addlinkedserver
'srv_lnk','','sqloledb','條碼資料庫IP地址'
exec
sp_addlinkedsrvlogin
'srv_lnk','false',null,'用戶名','密碼'
go
/*
查詢示例
*/
SELECT
A.ListCode
FROM
srv_lnk.條碼資料庫名.dbo.ME_ListCode
A,
IM_BarLend
B
WHERE
A.ListCode=B.ListCode
go
/*
刪除鏈接伺服器
*/
exec
sp_dropserver
'srv_lnk','droplogins'
第二種方法:
復制代碼代碼如下:
exec
sp_configure
'show
advanced
options',1
reconfigure
exec
sp_configure
'Ad
Hoc
Distributed
Queries',1
reconfigure
go
select
*
from
Proct
p
inner
join
opendatasource('SQLOLEDB','Data
Source=Macaco-Online;user
ID=sa;password=sa密碼;').Company.dbo.Proct
p2
on
P.PID=p2.PID
go
exec
sp_configure
'Ad
Hoc
Distributed
Queries',0
reconfigure
exec
sp_configure
'show
advanced
options',0
reconfigure
go
⑷ 如何使用SqlServer查詢資料庫表所有或指定記錄
如何使用SqlServer查詢資料庫表所有或指定記錄
一般右鍵點sqlserver裡面的表會有查詢表數據,點一下後會出來所有表數據,在表數據那邊右鍵選擇窗口->sql會在上方生產一個sql語句,在這里輸入後按F5可以查詢。
select
*
from
table查看所有
select
*
from
table
where
col1=「?」
and或者
or
col2=「?」
table是表名,
col1、2是欄位名
⑸ 「sqlserver」三表聯如何查詢「sql」語句
假設學生表叫student,課程表叫class,選課表叫choose
1.三層嵌套的問題
select student.name from student where student.id IN
(select choose.sid from choose where choose.cid NOT IN
(select class.id from class where class.teacher='李明'))
2.一個內連接,一個嵌套
select student.name,avg(choose.score) from
student inner join choose on student.id=choose.sid
where student.id IN
(select choose.sid from choose
where choose.score<'60'
group by choose.sid
having count(choose.sid)>=2)
gruop by student.id
3.一個聯合查詢,一個嵌套查詢
select student.name from student
where student.id IN
(select c1.sid from choose c1 where choose.cid='1'
union
select c2.sid from choose c2 where choose.cid='2'
on c1.sid=c2.sid
)
4.其實就是自連接查詢和行列交換的問題:
select student.id,
(case choose.id when '1' then choose.score end) as 1號課成績,
(case choose.id when '2' then choose.score end) as 2號課成績,
from student inner join choose on student.id=choose.sid sc1,
student inner join choose on student.id=choose.sid sc2
where sc1.id='1'
and sc2.id='2'
and sc1.score>sc2.score
⑹ SqlServer2005交叉表查詢問題
DECLARE @str as nVARCHAR(max)
set @str='yyq,'
select @str=@str+''''+fkmc+''''+'=sum(case fkmc when
'+''''+fkmc+''''+' then fk else null end),'
from hb group by fkmc
set @str='select '+substring(@str,1,len(@str)-1)+',sum(fk) as 合計 from hb group by yyq'
print @str
exec(@str)
你這樣寫,我執行了一下是可以的,除了數據為空時,其他都可以的
⑺ SqlServer如何生成動態交叉表查詢
這里指的交叉表,就是象Access的交叉表查詢一樣的效果,比如Employees表中City欄位代表了城市的名稱,TitleOfCourtesy代表稱呼,我們希望按照City和TitleOfCourtesy的情況來統計ReportsTo欄位的合計數(本統計沒有任何實際意義,只是挑選一些記錄包含重復內容的欄位來說明情況),並顯示成以下格式:(TitleOfCourtesy作為行,City作為列) ,�0�2�0�2SUM(CASE�0�2City�0�2WHEN�0�2'Redmond'�0�2THEN�0�2ReportsTo�0�2ELSE�0�2NULL�0�2END)�0�2AS�0�2[Redmond�0�2City] ,�0�2�0�2SUM(CASE�0�2City�0�2WHEN�0�2'Seattle'�0�2THEN�0�2ReportsTo�0�2ELSE�0�2NULL�0�2END)�0�2AS�0�2[Seattle�0�2City]FROM�0�2Employees�0�2GROUP�0�2BY�0�2TitleOfCourtesy 其中利用了CASE語句判斷,如果是相應的列,則取需要統計的ReportsTo數值,否則取NULL,然後再合計 其中有兩個常見問題說明一下: a、用NULL而不用0是有道理的,假如用0,雖然求和函數SUM可以取到正確的數,但類似COUNT函數(取記錄個數),結果就不對了,因為Null不算一條記錄,而0要算,同理空字串("")也是這樣,總之在這里應該用NULL,這樣任何函數都沒問題。 b、假如在視圖的設計界面保存以上的查詢,則會報錯「沒有輸出列」,從而無法保存,其實只要在查詢前面加上一段:Create View ViewName AS ...,ViewName是你准備給查詢起的名稱,...就是我們的查詢,然後運行一下,就可以生成視圖了,對於其他一些設計器不支持的語法,也可以這樣保存。 總體思路其實很簡單,首先檢索列頭信息,形成一個游標,然後遍歷游標,將上面查詢語句里Case判斷的內容用游標里的值替代,形成一條新的Sql查詢,然後執行,返回結果,就可以了,以下是我寫的一個存儲過程,供大家參考:CREATE�0�2procere�0�2CorssTab�0�2 @strTabName�0�2as�0�2varchar(50)�0�2=�0�2'Employees' ,�0�2--此處放表名@strCol�0�2as�0�2varchar(50)�0�2=�0�2'City' ,�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2--表頭分組依據欄位@strGroup�0�2as�0�2varchar(50)�0�2=�0�2'TitleOfCourtesy',--分組欄位@strNumber�0�2as�0�2varchar(50)�0�2=�0�2'ReportsTo' ,�0�2�0�2�0�2�0�2--被統計的欄位@strSum�0�2as�0�2varchar(10)�0�2=�0�2'Sum'�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2--運算方式ASDECLARE�0�2@strSql�0�2as�0�2varchar(1000 ),�0�2@strTmpCol�0�2as�0�2varchar(100)EXECUTE�0�2('DECLARE�0�2corss_cursor�0�2CURSOR�0�2FOR�0�2SELECT�0�2DISTINCT�0�2'�0�2+�0�2@strCol�0�2+�0�2'�0�2from�0�2'�0�2+�0�2@strTabName�0�2+�0�2'�0�2for�0�2read�0�2only�0�2')�0�2--生成游標begin�0�2�0�2SET�0�2nocount�0�2ON�0�2�0�2�0�2SET�0�2@strsql�0�2='select�0�2'�0�2+�0�2@strGroup�0�2+�0�2' ,�0�2'�0�2+�0�2@strSum�0�2+�0�2'('�0�2+�0�2@strNumber�0�2+�0�2')�0�2AS�0�2['�0�2+�0�2@strSum�0�2+�0�2'�0�2of�0�2'�0�2+�0�2@strNumber�0�2+�0�2']'�0�2--查詢的前半段�0�2�0�2OPEN�0�2corss_cursor�0�2�0�2while�0�2(0=0)�0�2�0�2BEGIN�0�2�0�2�0�2�0�2FETCH�0�2NEXT�0�2FROM�0�2corss_cursor�0�2--遍歷游標,將列頭信息放入變數@strTmpCol �0�2�0�2�0�2�0�2INTO�0�2@strTmpCol�0�2�0�2�0�2�0�2if�0�2(@@fetch_status<0)�0�2break�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2SET�0�2@strsql�0�2=�0�2@strsql�0�2+�0�2' ,�0�2'�0�2+�0�2@strSum�0�2+�0�2'(CASE�0�2'�0�2+�0�2@strCol�0�2+�0�2'�0�2WHEN�0�2'''�0�2+�0�2@strTmpCol�0�2+�0�2'''�0�2THEN�0�2'�0�2+�0�2@strNumber�0�2+�0�2'�0�2ELSE�0�2Null�0�2END)�0�2AS�0�2['�0�2+�0�2@strTmpCol�0�2+�0�2'�0�2'�0�2+�0�2@strCol�0�2+�0�2']'�0�2--構造查詢�0�2�0�2END�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2SET�0�2@strsql�0�2=�0�2@strsql�0�2+�0�2'�0�2from�0�2'�0�2+�0�2@strTabname�0�2+�0�2'�0�2group�0�2by�0�2'�0�2+�0�2@strGroup�0�2--查詢結尾�0�2�0�2EXECUTE(@strsql)�0�2--執行�0�2�0�2IF�0�2@@error�0�2<0�0�2RETURN�0�2@@error�0�2--如果出錯,返回錯誤代碼�0�2�0�2CLOSE�0�2corss_cursor�0�2�0�2�0�2DEALLOCATE�0�2corss_cursor�0�2RETURN�0�20�0�2--釋放游標,返回0表示成功endGO幾點說明:a、這是一個通用存儲過程,使用時@strTabName、@strCol、@strGroup、@strNumber、@strSum幾個變數設置一下就可以用到其他表上,其中結果集的第二列我加了個合計列 b、為了測試方便,我在存儲過程中設置了默認值,就是前面提到的Employees表,這樣直接運行時就可以出來我上面提到的結果。 c、使用時,可以把上面的代碼復制到企業管理器的查詢設計界面Sql窗格,或者查詢分析器里運行一下(注意正確選擇NorthWind資料庫),就可以生成一個存儲過程:CorssTab,然後直接運行CorssTab,如果出現本文前面類似的窗格,就表示運行成功了。 d、假如用於其它表,首先需要在你的用戶資料庫里生成此存儲過程(當然也可以放到Master里,然後再加個變數:@DataBase,賦值為資料庫名稱,然後在上面代碼打開指定資料庫,這樣所有的資料庫都可以調用它),當你調用時,採取以下格式: