Sql server 2008 如何返回发票编号-其中所有关联的明细记录的位字段都设置为1
这里是SQL新手 我想弄一份发票号码的清单。有两个表-发票和发票明细。invoicedetail表有一个名为scanned的字段,它是一个位字段。如果已扫描,则位字段为1 对于每个发票,invoicedetail中都有相关记录,但我只想要发票编号列表,其中invoicedetail的扫描字段中的每个相关记录都是1 如果可能的话,我宁愿在单个查询中执行此操作 InvoiceDetail中扫描的记录是返回的任何发票号的所有记录 谢谢你的帮助Sql server 2008 如何返回发票编号-其中所有关联的明细记录的位字段都设置为1,sql-server-2008,Sql Server 2008,这里是SQL新手 我想弄一份发票号码的清单。有两个表-发票和发票明细。invoicedetail表有一个名为scanned的字段,它是一个位字段。如果已扫描,则位字段为1 对于每个发票,invoicedetail中都有相关记录,但我只想要发票编号列表,其中invoicedetail的扫描字段中的每个相关记录都是1 如果可能的话,我宁愿在单个查询中执行此操作 InvoiceDetail中扫描的记录是返回的任何发票号的所有记录 谢谢你的帮助 SELECT InvoiceNumber FRO
SELECT
InvoiceNumber
FROM
Invoice
INNER JOIN
InvoiceDetail
ON
InvoiceDetail.ID = Invoice.ID
WHERE
InvoiceDetail.ScannedColumn=1
GROUP BY
Invoice.InvoiceNumber
或者
请确保更改列名以满足您的需要。将每个表中的ID用于联接,然后使用WHERE筛选记录以仅显示扫描的记录。因为您使用的是位字段,所以只需使用WHERE ScannedColumn=1。如果您想要的不仅仅是发票号码,那么分组解决方案很快就会成为一个难题。SELECT*FROM Invoice WHERE Id IN SELECT Id FROM InvoiceDetail WHERE Scanned=1此解决方案可能会遇到性能问题bigggg@Paul-这不取决于我或你,OP只要求提供发票号码。作为一种良好的做法,您永远不应该使用SELECT*。。。即使你需要所有的列,你也应该明确地标记你想要的每一列。你是对的,这正是他想要的数字。然而,我喜欢为冲击做好准备,这是有问题的。我多年来开发的障碍是编程客户指定的软件。从发票中选择[Invoices]。[InvoiceID]在idt上内部连接InvoiceDetail idt。InvoiceID=it.InvoiceID,其中idt.Scanned=1 ORDER BY it.InvoiceID DESC-根据我的表架构,这是特定于字段的,但我不理解错误。它是多部分标识符Invoices.InvoiceID无法绑定。我试图从发票中明确地识别InvoiceID,但这是我所能想到的,没有任何帮助。如何更正此问题?请在InvoiceDetail.InvoiceID=Invoices.InvoiceID其中InvoiceDetail.Scanned=1 ORDER BY Invoices.InvoiceID DESC工作时,从Invoices内部联接InvoiceDetail中选择不同的[Invoices].[InvoiceID],所以看起来我只是需要删除别名并正确格式化它-我似乎无法格式化评论-抱歉。但是你确实回答了我的问题,所以非常感谢悬崖
SELECT
DISTINCT
InvoiceNumber
FROM
Invoice it
INNER JOIN
InvoiceDetail idt
ON idt.ID = it.ID
WHERE
idt.ScannedColumn=1