none
Realizar consulta Con dos tablas que no se relacionan RRS feed

  • Pregunta

  • Buenas tardes tengo una duda como puedo realizar un query que me traiga informacion de dos tablas que no poseen un campo en relacion de lo cual deseo es que me traiga todos los datos de la tabla1 y de la tabla 2 el campo Color donde el campo color sea igual donde el campo Valvue se repita para ser mas claro voy a montar una imagen de ejemplo 

    Muchas Gracias por la ayuda


    Alexis Cano


    • Editado Alexis cano jueves, 10 de enero de 2019 16:20
    jueves, 10 de enero de 2019 15:23

Respuestas

Todas las respuestas

  • Esto... no se ve nada claro lo que quieres conseguir cuando dices "donde el campo Valvue se repita". En los resultados que etas mostrando en tu imagen se ven todos los colores distintos, no se ve que tengan nada que ver con las repeticiones de Valvue.
    • Propuesto como respuesta Pedro Alfaro jueves, 10 de enero de 2019 19:52
    jueves, 10 de enero de 2019 16:02
  • Si tienes razon ya cambio la imagen 

    Alexis Cano

    jueves, 10 de enero de 2019 16:18
  • Bien, ya lo veo. Parece complicadillo. Yo lo haría así:

    Primero una consulta sobre la primera tabla que agrupe por Valvue. Con su resultado, usar Row_number para numerar las filas. Eso devuelve un número secuencial que puedes unir mediante un Join con el Id de la tabla de colores (presumiendo que ese Id sea siempre secuencial y empiece por 1). Todo eso lo metes en una subconsulta, y el resultado de la subconsulta es una serie de parejas de Valvue y color. Esa subconsulta la conectas mediante join con la select de la primera tabla usando el campo Valvue, y eso te devuelve el color.

    Si pones por aquí el script que crea las tres tablas y las rellena de datos, te echo una mano para escribir una sentencia que haga todo lo anterior.

    jueves, 10 de enero de 2019 20:04
  • ALTER PROCEDURE [dbo].[GetLandAreasByLandId]
    	@LandId INT
    AS
    BEGIN
    
    
    	WITH LandAreasPlate (LandAreaId, Value,Valvula)
    	AS
    	(
    		SELECT Distinct  tblLandAreaProperties.landAreaId
    			,tblLandAreaPropertyValues.Value,
    			Null as Valvula
    			
    		FROM tblLandAreas
    			INNER JOIN tblLandAreaProperties ON tblLandAreas.LandAreaId =  tblLandAreaProperties.LandAreaId
    			INNER JOIN tblLandAreaPropertyValues ON tblLandAreaProperties.LandAreaPropertyId = tblLandAreaPropertyValues.LandAreaPropertyId
    			INNER JOIN sysProperties ON tblLandAreaProperties.SysPropertyId = sysProperties.SysPropertyId
    		WHERE tblLandAreas.LandId = @LandId AND sysProperties.Code = 'PLATE' AND tblLandAreaProperties._Deleted IS NULL AND tblLandAreaPropertyValues._Deleted IS NULL
    		
    		union all 
    				SELECT Distinct tblLandAreaProperties.landAreaId
    			,Null as Value,
    			tblLandAreaPropertyValues.Value as Valvula
    		FROM tblLandAreas
    			INNER JOIN tblLandAreaProperties ON tblLandAreas.LandAreaId =  tblLandAreaProperties.LandAreaId
    			INNER JOIN tblLandAreaPropertyValues ON tblLandAreaProperties.LandAreaPropertyId = tblLandAreaPropertyValues.LandAreaPropertyId
    			INNER JOIN sysProperties ON tblLandAreaProperties.SysPropertyId = sysProperties.SysPropertyId
    			
    		WHERE tblLandAreas.LandId = @LandId AND sysProperties.Code = 'VALVE' AND tblLandAreaProperties._Deleted IS NULL AND tblLandAreaPropertyValues._Deleted IS NULL
    		
    	)
    
    
    
    	SELECT tblLandAreas.LandAreaId
    		,tblLandAreas.LandId
    		,tblLandAreas.Code
    		,tblLandAreas.FullCode
    		,tblLandAreas.Name
    		,tblLandAreas.FullName
    		,tblLandAreas.Area
    		,tblLandAreas.BuildingDate
    		,tblLandAreas.CreationUser
    		,tblLandAreas.CreationUtcDateTime
    		,tblLandAreas.ModificationUser
    		,tblLandAreas.ModificationUtcDateTime
    		,tblLandAreas.Status
    		,tblLandAreas._ParentId
    		,tblLandAreas._Children
    		,tblLandAreas._Level
    		,tblLandAreas._BuiltIn
    		,tblLandAreas._Deleted
    		,tblLandAreas.GlobalId
    		,tblLandAreas.GlobalModificationUtcDate
    		,LandAreasPlate.Value AS Plate,
    		LandAreasPlate.Valvula 
    	FROM tblLandAreas
    		LEFT JOIN LandAreasPlate  ON tblLandAreas.LandAreaId = LandAreasPlate.LandAreaId
    	WHERE LandId = @LandId 
    		AND _Deleted IS NULL 

    Mira este es el procedimiento almacenado que me genera la primer tabla que monte en la imagen obviamente en la imagen no coloque todas las columnas  muchas gracias por la ayuda

    Alexis Cano

    viernes, 11 de enero de 2019 11:02
  • Deleted
    viernes, 11 de enero de 2019 11:46
  • 	WITH LandAreasPlate (LandAreaId, Value,Valvula)
    	AS
    	(
    	Select Ax.LandAreaId,Ax.Value,Ax.Valvula  from (
    		SELECT   tblLandAreaProperties.landAreaId
    			,tblLandAreaPropertyValues.Value,
    			Null as Valvula
    			
    		FROM tblLandAreas
    			INNER JOIN tblLandAreaProperties ON tblLandAreas.LandAreaId =  tblLandAreaProperties.LandAreaId
    			INNER JOIN tblLandAreaPropertyValues ON tblLandAreaProperties.LandAreaPropertyId = tblLandAreaPropertyValues.LandAreaPropertyId
    			INNER JOIN sysProperties ON tblLandAreaProperties.SysPropertyId = sysProperties.SysPropertyId
    			Group by tblLandAreaProperties.LandAreaId,tblLandAreaPropertyValues.Value,tblLandAreas.LandId,sysProperties.Code,tblLandAreaProperties._Deleted,tblLandAreaPropertyValues._Deleted
    		Having tblLandAreas.LandId = @LandId AND sysProperties.Code = 'PLATE' AND tblLandAreaProperties._Deleted IS NULL AND tblLandAreaPropertyValues._Deleted IS NULL
    		
    		union all 
    				SELECT  tblLandAreaProperties.landAreaId
    			,Null as Value,
    			tblLandAreaPropertyValues.Value as Valvula
    		FROM tblLandAreas
    			INNER JOIN tblLandAreaProperties ON tblLandAreas.LandAreaId =  tblLandAreaProperties.LandAreaId
    			INNER JOIN tblLandAreaPropertyValues ON tblLandAreaProperties.LandAreaPropertyId = tblLandAreaPropertyValues.LandAreaPropertyId
    			INNER JOIN sysProperties ON tblLandAreaProperties.SysPropertyId = sysProperties.SysPropertyId
    			Group by tblLandAreaProperties.LandAreaId,tblLandAreaPropertyValues.Value,tblLandAreas.LandId,sysProperties.Code,tblLandAreaProperties._Deleted,tblLandAreaPropertyValues._Deleted
    		HAVING tblLandAreas.LandId = @LandId AND sysProperties.Code = 'VALVE' AND tblLandAreaProperties._Deleted IS NULL AND tblLandAreaPropertyValues._Deleted IS NULL
    		) as Ax  
    		
    	)
    
    	--select  l.Valvula,(select  HexaValue from SysColors )as color from LandAreasPlate l  group by l.Valvula
    	SELECT tblLandAreas.LandAreaId
    		,tblLandAreas.LandId
    		,tblLandAreas.Code
    		,tblLandAreas.FullCode
    		,tblLandAreas.Name
    		,tblLandAreas.FullName
    		,tblLandAreas.Area
    		,tblLandAreas.BuildingDate
    		,tblLandAreas.CreationUser
    		,tblLandAreas.CreationUtcDateTime
    		,tblLandAreas.ModificationUser
    		,tblLandAreas.ModificationUtcDateTime
    		,tblLandAreas.Status
    		,tblLandAreas._ParentId
    		,tblLandAreas._Children
    		,tblLandAreas._Level
    		,tblLandAreas._BuiltIn
    		,tblLandAreas._Deleted
    		,tblLandAreas.GlobalId
    		,tblLandAreas.GlobalModificationUtcDate
    		,LandAreasPlate.Value AS Plate,
    		LandAreasPlate.Valvula into #tmpareas
    	FROM tblLandAreas
    		LEFT JOIN LandAreasPlate  ON tblLandAreas.LandAreaId = LandAreasPlate.LandAreaId
    	WHERE LandId = @LandId 
    		AND _Deleted IS NULL 
    
    	Select t.*,A.HexaValue as Color from (Select * from (Select row_number() OVer(order by t.Valvula asc)as number, t.Valvula from #tmpareas t
    	Group by  t.valvula) as Ax join SysColors c on Ax.number = c.SysColorId) as A Right join #tmpareas t on A.Valvula = t.Valvula

    Considerando la respuesta de Alberto Poblacion
     asi realice la consulta y me funciono muchas gracias  

    Alexis Cano

    viernes, 11 de enero de 2019 12:29