注意:为了清楚起见,整个问题已被重写。
我一直在考虑这个看似简单的问题,我确切地知道自己想做什么,但不知道怎么做。
我有2个表格,其中包含以下相关列
Products: ProductID, ProductName
每个条目都是公司生产的一种产品。 ProductID是主键。新条目很少。
Orders: OrderID, ProductName, ArticleID
每个条目都是向公司下达的订单。 OrderID是主键。新条目不断进行。
以下是我正在寻找的用户体验:
用户将产品名称输入Orders.ProductName。
Orders.ProductID自动成为产品的ProductID。 通过转到表Products,到ProductName与用户输入的名称匹配的行,并返回该行上的ProductID,可以看出这一点。
在Excel中,这就像在单元格中输入“=”后跟所需的代码。我不想在自动生成的字段中存储任何数据,因为它存在于其他地方,并且在两个不同的地方不存储相同的信息是很好的数据库实践。
我已经尝试了几个SQL查询,包括内部联接,但我不能为我的生活找出如何从单个单元格中获取信息(未在代码中预定义。取得ProductID的行取决于用户 - 书面产品名称)。
再次:最好所有这一切都是以不仅将最终数据输入到单元格中的方式完成的,而是将其作为一个函数来完成,如果任何数据发生变化,就会一直重新评估(就像“ = SUM(B4,B5)“excel中”
答案 0 :(得分:0)
好的不确定你的要求,但这里有。
您的查询似乎没问题,除非您需要根据原因选择它。
我的意思是你现在返回所有与两个表匹配的记录,你想根据下拉框过滤这个吗?
如果这是真的,您可以使用MS SQL存储过程执行此操作。 如下:
USE [YourDatabaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[MyProcedureName]
@dropDownID int
AS
SELECT Articles.ArticleID
FROM Articles
INNER JOIN Orders ON Articles.ArticleNr=Orders.ArticleNr
WHERE articles.ID = @dropDownID
然后在你的代码中使用vb或c#将所选下拉列表的值传递给过程并返回结果。
这是你的事吗?
答案 1 :(得分:0)
您可能正在设计这样的
articleTable - ArticleID,ArticleNr
订单 - OrderID,ArticleID
select Orders.OrderID, Orders.ArticleID, articleTable.ArticleNr
from Orders
left join articleTable on Orders.ArticleID = articleTable.ArticleID
在订单表中输入新订单时,用户键入 在“96964-A”中进入ArticleNr,我想自动使用ArticleID 变成“2”。如果这相反起作用将是最佳的 好。
只需将ArticleID作为SQL Server中的标识或MS Access中的自动编号