Ich habe das Problem, dass ich 12 Max Zeilen aus 3 Tabellen Union Daten benötigen. Wenn jedoch in der Tabelle keine festen Zeilen vorhanden sind, sollten andere Tabellen für die verbleibenden Zeilen berücksichtigt werden.Top 12 von Union Abfragen filtern max 12 Zeilen MS Sql
Zum Beispiel: Ich habe 3 Tabellen Produkt Kategorie Hersteller
Fall 1: Wenn alle 10 Zeilen jeweils als wir wählen soll vier Zeilen aus jeder Tabelle. Fall 2: Wenn die Produkttabelle 3 Zeilen hat und die Kategorie ein Hersteller 5 Zeilen hat , dann sollte es jeweils 3 von Produkt und 5 von Kategorie oder Hersteller auswählen. Fall 3: Alle haben weniger als 4 Zeilen als so viele verfügbare Zeilen angezeigt.
Bitte helfen Sie mir, dies zu erreichen. Ich poste meine gespeicherte Prozedur, die ich bis jetzt erstellt habe.
Create PROCEDURE [dbo].[GetRowsfromtables]
@SearchTerms nvarchar(150)
AS
BEGIN
create table #search (id int identity ,ids int, productname nvarchar(200), categoryname nvarchar(200), tagname nvarchar(200), SeName nvarchar(200), displayorder int)
insert into #search
Select Top 12 p.Id as ids, p.name as productname, '' as categoryname, '' as tagname, '' as SeName, 0 as displayorder from Product p where p.Published = 1 and p.Deleted = 0 and name like '%' + @SearchTerms + '%'
union
Select Top 12 c.id as ids, '' as productname, c.name as categoryname, '' as tagname, '' as SeName , 1 as displayorder from Category c where c.Published = 1 and c.Deleted = 0 and Name like '%' + @SearchTerms + '%'
union
Select Top 12 t.id as ids, '' as productname, '' as categoryname, t.Name as tagname, '' as SeName, 2 as displayorder
from Manufacturer
where Name like '%' + @SearchTerms + '%'
Select id, ids,productname,categoryname, tagname, SeName, tagpcount,tagproductid,
'' as ThumbnailImage, displayorder, (Select count(*) from #search where displayorder = 0) as ptotal,
(Select count(*) from #search where displayorder = 1) as ctotal,
(Select count(*) from #search where displayorder = 2) as tagtotal,
row_number() over(partition by displayorder order by id) as rn
from #search
order by displayorder
drop table #search
END
'TOP' ohne' ORDER BY' gibt Ihnen, was auch immer die Suchmaschine wählt. – HABO
Sie sind fast da.Ihre Abfrage wählt aus # Suche aus und wendet eine Bestellung an (die Spalte, die Sie alias rn nennen), verwendet sie dann aber nicht. Ordnen Sie nach rn und fügen Sie der SELECT-Anweisung TOP 12 hinzu. –