c# - SQL 统计关系数据
问题描述
我想知道如何在dataGridView
存储过程的帮助下添加额外的数据
注意:这可能与我的 SQL 查询有关(不确定)。
我有以下代码将我的产品数据返回到dataGridView
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleDatabaseWalkthrough.Properties.Settings.SampleDatabaseConnectionString"].ConnectionString))
{
if (cn.State == ConnectionState.Closed)
cn.Open();
using (DataTable dt = new DataTable())
{
using (SqlCommand cmd = new SqlCommand("exec dbo.GetProducts", cn))
{
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
dataGridViewProducts.DataSource = dt;
dataGridViewProducts.AutoGenerateColumns = false;
}
}
}
这是我与上面代码关联的默认存储过程:
CREATE PROCEDURE [dbo].[GetProducts]
AS
begin
SELECT * from Products
end
以上代码的组合 100% 有效。现在我想将关系表数据添加到我的产品查询中,如下所示:
CREATE PROCEDURE [dbo].[GetProducts]
AS
begin
SELECT * from Products p
Join Serials s ON s.Id = p.Id
end
上面的这个存储过程应该返回我的产品数据+每个产品序列的计数。(IE):
Name: Product 1
Origin: Local
Serials: 15 <-- this is count of relationship table
截屏:
问题
正如您在我的屏幕截图中看到的,我的两个产品都在列中收到序列号serials
但只有我的产品Table
有序列号,因此在serials
产品表的列中应该说2
,对于产品Lamp
应该说0
更新
我只是注意到,在我的查询中,我应该得到像这样的连续剧,Join Serials s ON s.ProductId = p.Id
而不是像这样得到它们Join Serials s ON s.Id= p.Id
。
但问题是这次我得到了 2 个表,但没有 Lamp 产品dataGridView
(因为 Lamp 没有任何与之关联的序列号)。
有什么建议吗?
更新 2
序列表架构
CREATE TABLE [dbo].[Serials] (
[Id] INT NOT NULL,
[ProductId] INT NOT NULL,
[Serial] NVARCHAR (50) NOT NULL,
[Sold] bit NOT NULL DEFAULT 0,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Serials_Products] FOREIGN KEY ([ProductId]) REFERENCES [dbo].[Products] ([Id])
);
解决方案
尝试这个。与子查询相比,连接的性能总是更好。
SELECT P.*, COUNT(s.serail)serialCount
FROM product P
LEFT OUTER JOIN serail S ON (p.id = s.PID)
GROUP BY P.id, P.Name, P.Quantity -- _and all other columns of product table_
推荐阅读
- rest - SpringBoot:是否可以在 8080 端口上部署我对 https 和休息服务的看法?
- javascript - 防止某些内容在 contenteditable td 中被编辑
- javascript - Nightwatch.js:点击文本链接
- android - 打开另一个应用程序的 Intent (getLaunchIntentForPackage()) 总是返回到第一个活动
- javascript - 我应该用打字稿将我所有的快递服务器包装在一个类中吗?
- javascript - 无法让 javascript 在我的网站上运行;Django 民意调查
- linux - MPI 无法编译基准(未定义对“MPI_Type_extent”的引用)
- php - Laravel - MethodNotAllowedHttpException。邮政
- excel - 如何在模型-视图-演示者模式中设计模型?
- javascript - jQuery nextUntil 与孩子