我在Period
中的Varchar
(数据类型为tableA
)列中有值,如下所示:
表A
Period
------
3M
124W
200D
2Y
在表B中,列Frequency
(数据类型:numeric
)的值为4.0000,154.00000,100.00000,4.00000及其对应的句点代码Period_Code
(数据类型:{{1同一个表TableB中的列,如M,W,D和Y。
表B
Varchar
我可以在Frequency | Period_Code
-------------------------------
4.0000 | M
154.00000 | W
100.00000 | D
4.00000 | Y
上加入两个表格。
我想比较表B中记录的order_id
和Frequency
的组合是否存在于TableA的Period_Code
列中。
我该怎么做?
它是SQL Server 2008或更高版本。
请帮忙。
感谢。
答案 0 :(得分:0)
一个问题......你如何将4.0000作为INT?
所以你有这样的事情:
Dim newRow As DataRow = yourdatatable.NewRow()
With newRow
.SetField(Of Int32)("ORDER_DET_ID", Int32.Parse(Me.TextBoxOrderDetID.Text))
.SetField(Of String)("ORDER_DET_ITEM", Me.TextBoxOrderDetItem.Text)
' etc.
End If
yourdatatable.Rows.Addf(newRow)
答案 1 :(得分:0)
以下代码与所需的输出匹配:
DECLARE @tableA TABLE
(
[Period] VARCHAR(50)
)
DECLARE @tableB TABLE
(
[Frequency] INT
, [Period_Code] VARCHAR(50)
)
INSERT INTO @tableA
VALUES('3M'), ('124W'), ('200D') , ('2Y')
INSERT INTO @tableB(Frequency, Period_Code)
VALUES(4, 'M')
, (154, 'W')
, (100, 'D')
, (4, 'Y')
SELECT * FROM @tableA
SELECT * FROM @tableB
SELECT * FROM @tableA a
INNER JOIN
@tableB b
ON a.Period = CONVERT(VARCHAR, b.Frequency) + b.Period_Code
答案 2 :(得分:0)
如果要连接tableB中的两个字段,可以使用CONCAT
函数(SQL Server 2012+)或+
(旧版本)。然后,要查找连接字段是否与tableA中的句点列匹配,您可以直接join
或使用IN
或只使用EXISTS
来完成所需的输出:
加入方法
SELECT distinct b.*
FROM tableA a
INNER JOIN (
SELECT order_id,
frequency,
period_code,
convert(VARCHAR(255), cast(frequency as int)) + period_code AS period
FROM tableB
) b ON a.order_id = b.order_id and a.period = b.period;
EXISTS方法
SELECT distinct b.*
FROM tableB b
WHERE EXISTS (
SELECT 1
FROM tableA a
WHERE a.order_id = b.order_id
AND a.period = convert(VARCHAR(255), cast(frequency as int)) + b.period_code
);
IN方法
SELECT DISTINCT b.*
FROM tableB b
WHERE convert(VARCHAR(255), cast(frequency as int)) + period_code IN (
SELECT period
FROM tableA a
WHERE a.order_id = b.order_id
);
相反,如果您想输出匹配失败的所有order_ids',您可以使用NOT EXISTS
或NOT IN
来执行此操作:
NOT EXISTS方法
SELECT distinct b.order_id
FROM tableB b
WHERE NOT EXISTS (
SELECT 1
FROM tableA a
WHERE a.order_id = b.order_id
AND a.period = convert(VARCHAR(255), b.frequency) + b.period_code
);
NOT IN方法
SELECT distinct b.order_id
FROM tableB b
WHERE convert(VARCHAR(255), frequency) + period_code NOT IN (
SELECT period
FROM tableA a
WHERE a.order_id = b.order_id
);
答案 3 :(得分:0)
选择A.order_id,B.order_id,A.Period,B.Period_Code,B.Frequency
来自tableB B
在a.order_id = b.order_id
上左连接表A A.其中cast(substring(A.period,1,(len(A.period)-1))AS数字(14,6))<>
B.FREQUENCY或
上(右(A.period,1))<> B.Period_Code