這個話題在csdn社群經常見到,但是之前不太留心,這次自己碰到了,就把解決方法做個記錄,以備下次參考。
領導前幾天發了個**給我,是零件和機器型號對應表,裡面就兩列,一列是機器型號,另一列是零件號,這兩者當然是多對多的關係啦。他要我做的事中涉及到一環,就是把每個機器型號對應的所有零件號列出來,或者把每個零件號對應的所有機器型號列出來。
這兩列都是字元型別的,sql 語句提供了sum 這樣的聚合函式把數值彙總,卻沒有提供sumstring 這樣的函式把字串彙總,只有自己動手寫了。
這個問題的實現在access 2003 和ms sql 中還是很不一樣的。access 中是用vba來編寫自定義的函式,需要通過data object 來呼叫sql 語句。而在ms sql server 中自定義的函式直接就可插入sql 語句。access 中用vba 編寫的函式可以用在access 查詢中。
我在access 中的實現方法如下:
新建乙個module,在裡面定義自己的函式。函式定義如下:
function addstring(partstring as string) as string
' 宣告查詢語句字串和字段相加的字串變數
dim originalstr, querystr as string
' 宣告ado的乙個記錄物件,注意用 new 來宣告並生成例項
dim myrecordset as new adodb.recordset
originalstr = ""
' 查詢語句字串是通過連線零件編號生成的,注意sql語句需要引號
querystr = "select * from material where parts=""" + partstring + """"
myrecordset.open querystr, currentproject.connection
do while not myrecordset.eof
originalstr = originalstr + myrecordset("module") + ","
myrecordset.movenext
loop
' vba語法,把返回值賦給函式名
addstring = originalstr
end function
看到乙個網友解決同樣問題的做法,他不是用ado 物件,他用了下面一句:
set ff = currentdb.openrecordset(querystr)
他實際上是隱性用了dao物件。不過,如果你在vba中顯性宣告dao 物件的話,有可能會碰到編譯錯誤,這是因為access vba 預設沒有包含 dao 庫的引用。
函式定義好後,就可以用在查詢裡了,sql 檢視下,我的例子的sql 語句如下:
select addstring(parts) as allmod, material.parts
from material
group by material.parts
order by material.parts;
ms sql server 中的例子就很多啦,也是自定義乙個函式,然後把自定義的函式用在sql 語句中,我把例子也記下來吧。
create function fn_addstring(@partnumber varchar(50))
returns nvarchar(1000)
as
begin
declare @s nvarchar(1000)
set @s=''
select @s = @s+module+',' from material where parts = @partnumber
return @s
end
go
在sql 語句中呼叫該函式
select parts, dbo.fn_addstring(parts) as allmod from material
group by parts
多表關聯彙總在MS SQL和ACCESS中的寫法
多表關聯彙總在ms sql和access中的寫法 ms sql 建立測試環境 create table ws employee id int,name varchar 10 insert into ws employee select 1,a union all select 2,b union a...
多表關聯彙總在MS SQL和ACCESS中的寫法
多表關聯彙總在ms sql和access中的寫法 ms sql 建立測試環境 create table ws employee id int,name varchar 10 insert into ws employee select 1,a union all select 2,b union a...
MSSQL 列記錄合併
在專案開發中,有時會碰到將列記錄合併為一行的情況,例如根據地區將人員姓名合併,或根據拼音首字母合併城市等,下面就以根據地區將人員姓名合併為例,詳細講一下合併的方法。首先,先建乙個表,並新增一些資料,建表 如下 if object id n demo is not null begin drop ta...