0
A
回答
2
「AcctRef」,在你的DebitNoteTable,是"repeating column"。
這是一個大的,巨大的,沒有沒有:)
你借記表應該是這個樣子:
Debit No AcctRef
-------- -------
DN1 CMP1
DN1 CMP3
DN1 CMP6
...
那麼你可以做一個簡單的「加盟」;)
下面是正常化的一個很好的概述。我絕對鼓勵你重新審視你的架構,如果可能的話:
如果不能,然後我猜「B計劃」是寫一個程序:
讀取所有的價格,並將其存儲在一個表中
讀取所有的t他AcctRef對所有借記
解析每個AcctRef成單獨的應計
版畫的價格和每個借記每個每股收益
這實際上意味着在整個數據庫中讀取所有數據和然後手動重新組織它。如果你打算這麼做的話,爲什麼首先要打擾一個數據庫呢?
PS: 不幸的是,您使用了位圖來表格。文本將是更加美好;)
0
我想這應該是這樣的:
SELECT a.Accrual_No, a.Price, d.Debit_no FROM AccrualNote AS a, DebitNote as d
WHERE a.Accrual_No IN d.AccRef
接下來,您需要創建您開始使用這個查詢記錄的循環(只是嘗試使用phpMyAdmin
(確保paulsm4是權是絕對的,但也許你不能改變表結構)
+0
它不工作...如果可能,請給一些其他解決方案 – 2012-08-17 05:35:26
1
試試這個:
由於該表不歸,你必須做下面的步驟..在列中保留逗號分隔值是一個壞主意。關於你必須把它分解表中的任何一種操作..
第1步:你必須創建下面的函數分裂accRef列
create FUNCTION [dbo].[SDF_SplitString]
(
@sString varchar(2048),
@cDelimiter char(1)
)
RETURNS @tParts TABLE (part varchar(2048))
AS
BEGIN
if @sString is null return
declare @iStart int,
@iPos int
if substring(@sString, 1, 1) = @cDelimiter
begin
set @iStart = 2
insert into @tParts
values(null)
end
else
set @iStart = 1
while 1=1
begin
set @iPos = charindex(@cDelimiter, @sString, @iStart)
if @iPos = 0
set @iPos = len(@sString)+1
if @iPos - @iStart > 0
insert into @tParts
values (substring(@sString, @iStart, @[email protected]))
else
insert into @tParts
values(null)
set @iStart = @iPos+1
if @iStart > len(@sString)
break
end
RETURN
END
第2步:
使用此查詢得到的結果
with cte as(
select * from DebitNote cross apply dbo.SDF_SplitString(AccRef,','))
select part,price,[Debit No]=STUFF((SELECT ', ' + DebitNo
FROM cte b
WHERE b.part = a.part
FOR XML PATH('')), 1, 2, '')
FROM cte a join AccrualNote
on part=AccrualNo
GROUP BY part,price
SQL Fiddle Demo
0
CREATE FUNCTION [dbo].[F_Get_DebitNo] (@AccrualNo VARCHAR(20))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @DebitNo VARCHAR(100)
SET @DebitNo = ''
SELECT @DebitNo = @DebitNo + ',' + DebitNo
FROM DebitNote
WHERE CHARINDEX(@AccrualNo, AccRef) > 0
SELECT @DebitNo = RIGHT(@DebitNo, LEN(@DebitNo) - 1)
RETURN @DebitNo
END
的SQL工作得很好,我心中已經已經測試它,你只需要如下創建一個標值功能。
SELECT AccrualNo ,
Price ,
dbo.F_Get_DebitNo(AccrualNo) FROM AccrualNote
相關問題
- 1. 結合兩個沒有公共字段的表
- 2. 獲取結果來自兩個表的公共密鑰
- 3. 從兩個表中獲取結果
- 4. 如何從沒有唯一字段的兩個不同表中獲取記錄
- 5. 如何從一個表中獲取兩個字段的組合
- 6. 休眠標準 - 從兩個表中獲取沒有任何關聯的結果
- 7. SQL從兩個表中獲取公共行
- 8. 從多個具有公共字段的表中傾銷數據
- 9. 如何加入沒有公共屬性的兩個表
- 10. 如何從兩個表中總結兩個不同的字段與一個字段是共同的
- 11. 如何從兩個表中的結果中獲得一個ID
- 12. 從另一個表中沒有該組合的表中獲取所有結果
- 13. 如何在鏈接列表中獲取兩套公共元素?
- 14. Mysql:從所有表中獲取結果
- 15. 從單獨的表和沒有共同的字段的MySQL結果
- 16. 從2個表中篩選數據並從兩個表中獲取結果
- 17. 在sql中合併兩個沒有公共列的表格
- 18. MySQL從多個表中獲取結果
- 19. SQL查詢,從兩個不同的表中獲取結果
- 20. 如何更新另一個表中的列,如果兩個表都有一個共同的文本字段
- 21. 如何將兩個結果集合在一個公共列中?
- 22. 從公共字段的另一個表中導入數據
- 23. 一個php/MySQL表格與一個公共字段的兩個表?
- 24. 優化查詢以從兩個表中獲取結果
- 25. 如何從兩個數組列表中刪除公共值
- 26. 如何使用單個查詢從兩個表中獲取結果
- 27. 如何合併兩個在SQL Server中沒有公共列的表?
- 28. 如何從行結果中的另一個表列中獲取結果?
- 29. 如何比較在Sql Server中具有公共字段的兩個單獨查詢的結果?
- 30. 如何從多個表中獲取一個字段的數據?
這裏通過考慮來自表-1的AccRef和來自表-2的AccrualNo,我們需要找到結果。這裏通常意味着這兩個。 – 2012-08-17 05:26:14